温柔网

 找回密码
 注册

查看: 520|回复: 0

[Hack][转帖]“关于数据库的简单入侵”的简单防范

[复制链接]
发表于 2004-1-2 04:00:38 | 显示全部楼层 |阅读模式
的确,对于目前的多数网站都使用ASP+MSSQL的架构来说,kennidy的这个入侵方法的确是必杀技,如果你是一个ASP程序员,应该知道了吧,是不是基本没有注意这些东西呢。
 
关于ASP+MSSQL入侵的东西很早就提出来了,就跟'or'1'='1一样,都是出于对脚本的代码编写漏洞进行的。因为在ASP+MSSQL中,要从浏览器端得到一些参数变量,然后在ASP脚本中去运用,在进行数据库操作中,出现很多SELECT语句,这些语句的内容又是从浏览器端得到的,因此,ASP+MSSQL的入侵,也就是来构造特殊的输入,然后改造了SQL语句,于是……



 好吧,既然是从浏览器端得到的东西,当然应该想到“过滤”。(不是我说的,地球人都知道,呵呵)



 让我们想想正常的ASP脚本使用的SQL语句吧。
 随便一个例子:
 SQL="SELECT * FROM (table) WHERE ID='" &intID& "' AND Topic='" &strTopic&
"'"
 这里intID和strTopic是需要从浏览器端得到的变量。



 好了,上面是我们需要的SQL语句,如果要入侵呢,就必须构造新的SQL语句。看看kennidy(其实要从这个方向入侵,就这样弄)提到的:



  news.asp?id=2;exec master.dbo.sp_addlogin hax;--
 
 “--”是用来注释的,于是SQL语句就变成我们不希望的:



  SELECT * FROM news WHERE id=2;exec sp_addlogin hax;--AND topic=... AND
... 



 好吧。来看看解决办法(其实要从这个方向防范,就这样弄)。我们的正常使用操作数据库(SQL语句中)应该不需要使用exec之类的,而要入侵超越权限就需要使用exec之类,这些就需要屏蔽了。



 需要屏蔽的关键字:exec,declare,还有就是一些需要控制的字符(串)了,比如:sp_,xp_,"_","+","'",";","@"等等(呵呵,异常符号都屏蔽了吧)。屏蔽的时候,对于字符串屏蔽不如对单个字符的屏蔽简单,如果入侵要跨越权限就会用到"_",";","--","//","@",而这些字符几乎不使用,至于"_","+"到是可能用到的。



 那我们就开始吧。下面是一个简单的过滤函数



Function Filter_SQL(strData)



 Dim strFilter
 Dim blnFlag
 Dim i



 strFilter="',;,//,--,@,_,exec,declare"   '需要过滤的字符,可以自己添,","是分隔符
 blnFlag=Flase   '过滤标志,如果产生过滤,那么就是真
 
 Dim arrayFilter
 arrayFilter=Split(strFilter,",")
 For i=0 To UBound(arrayFilter)
   If Instr(strData,arrayFilter(i))>0 Then
    blnFlag=True
Exit For
   End If
 Next



 If blnFlag Then
   Response.Redirect "wrong.asp"
'当发现有过滤操作时,导向一个预定页面。反正正常访问用不到的连接请求,总不是好事情。
 Else
   Filter_SQL=strData
 End If



End Function

 通常,对于用户名一类的输入,可以容许"_"这样的字符。所以,你可以扩展上面的函数,添加一个判别需要过滤的字符串的属性参数。利用这个函数对所有的Request项目进行过滤检查。

 这些只是简单的处理措施,其实ASP+MSSQL需要注意的东西太多了,而且很多配置需要做。本来这个东西不属于漏洞,只是太多人写程序不注意,不做安全考虑(我也一样),觉得太麻烦了。大家随意,爱做就做


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|温柔网 ( 浙ICP备13033583号-8 )

GMT+8, 2024-5-2 10:05 , Processed in 0.033291 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表