首页
社区
课程
招聘
[旧帖] [推荐]对SQL注入漏洞的防御 0.00雪花
发表于: 2010-6-13 14:59 1322

[旧帖] [推荐]对SQL注入漏洞的防御 0.00雪花

2010-6-13 14:59
1322
对于一个网站来说,SQL注入漏洞的危害是巨大的。

由于问题出在代码上,所以最终还是要从程序代码上去解决。不过很多网站的站长对代码并不是很了解,他们只是从网络上下载一套系统来用而已,叫他们自己改代码似乎有点为难了。不过程序的开发人员会不定期地发布一些补丁,站长们可以通过勤打补丁来补上漏洞。

对于具有代码编写能力的人,对每一个从客户端接收来的数据都应该做好过滤才放到SQL语句里去执行。以前的普遍做法是一个一个地过滤有可能出现漏洞的参数,不过现在有人开发了一套SQL通用防注入系统。

其思路就是把提交到页面的所有数据都过滤一遍,其实SQL注入提交的数据都有一个特征,就是数据里会有SQL语句和一些SQL语言的关键字,比如“AND”、“UNION”、“SELECT”等字符串,只要在数据里存在这些字符串,就可以判定为SQL注入行为来处理,而不会把这个数据当成SQL语句去执行了。

以下是作者根据这个思路模仿SQL通用防注入系统编写的代码:

<%
'--------定义部分------------------
Dim FangZhuPost,FangZhuGet,FangZhuIn,FangZhuInf,FangZhuXh
'注释:自定义需要过滤的字串,用“|”分隔,如果读者发现有什么遗漏可以加上去
FangZhuIn = "'|;|and|(|)|exec|insert|select|union|delete|update|count
|*|%|chr|mid|master|truncate|char|declare"

FangZhuInf = split(FangZhuIn,"|") '注释:把非法字符串用“|”分割出来
'--------POST部分------------------
If Request.Form<>"" Then
For Each FangZhuPost In Request.Form '注释:循环取得提交的参数
For FangZhuXh=0 To Ubound(FangZhuInf) '注释:全部转换成大写
If Instr(LCase(Request.Form(FangZhuPost)),FangZhuInf(FangZhuXh))<>0 Then
'注释:如果在数据里有非法字符串
Response.Write "<Script Language=JavaScript>alert('请不要在参数中包
含非法字符尝试注入!');</Script>"

Response.End
End If
Next
Next
End If
'----------------------------------

'--------GET部分-------------------
If Request.QueryString<>"" Then
For Each FangZhuGet In Request.QueryString
For FangZhuXh=0 To Ubound(FangZhuInf)
If Instr(LCase(Request.QueryString(FangZhuGet)),FangZhuInf(FangZhuXh))<>0 Then
Response.Write "<Script Language=JavaScript>alert('请不要在参数中包
含非法字符尝试注入!');</Script>"

Response.End
End If
Next
Next
End If
%>

把这些代码保存在一个asp文件里,比如fang.asp,并把这个fang.asp文件放在要防护的页面文件的目录下。在要防护的页面开头加入一句<!-- #include file=“fang.asp”→,保存并退出就可以了。

再来测试一下,看看是否能防住SQL注入漏洞,在浏览器里面提交http://127.0.0.1 /veryzone/ announce.asp? id=16 and 1=1,就会弹出如图2-73所示的对话框,并且什么也不会显示了。

图2-73
如果参数里没有非法字符,页面还是可以正常显示的,如图2-74所示。

图2-74

这样就可以杜绝SQL注入漏洞了,不过这也不是万全之策,因为这个代码是“通杀”的,也就是“宁杀错不放过”的那种,如果用户输入的数据确实要输入那些东西,那也会被当成非法字符串,这种情况到目前还没有更好的办法来解决,只能让用户输入一些其他的字符串来代替。

本小节对SQL注入漏洞的防范手法进行了详细的介绍,并模仿防注入漏洞程序编写一段防注入漏洞的代码,从而杜绝SQL注入漏洞的出现了。以目前的情况,还没有人能发现突破这段代码的办法,站长们可以放心地使用这段代码来做防护。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 780
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
漏洞无处不在啊
2010-6-13 15:02
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主今天有时间来防水了。呵呵
2010-6-13 15:04
0
游客
登录 | 注册 方可回帖
返回
//