如何理解SQL注进程序带来的攻击及防范
- 发布时间:2012-01-19
- 如何理解SQL注进程序带来的攻击及防范? 我们先来看变量过滤部分的代码:
'--------定义部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
'自定义需要过滤的字串,用 "枫" 分隔
Fy_In = "'枫;枫and枫exec枫insert枫select枫delete枫update枫count枫*枫%枫chr枫mid枫master枫truncate枫char枫declare"
'----------------------------------
%>
<
Fy_Inf = split(Fy_In,"枫")
'--------POST部份------------------
If Request.Form<> Then
For Each Fy_Post In Request.Form
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>Then
'--------GET部份-------------------
If Request.QueryString<> Then
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>Then
这段代码中定义了对“'”“and”等常用注进变量的过滤,假如觉得过滤不够或太多可自行增减字符。很明显,只要通过get或post向服务器提交的数据中包含被过滤字符,都会被程序禁止。这就导致了一个题目,假如是在论坛的数据库连接文件后加进程序代码,发贴时只要贴子内容包括被过滤的字符就会被禁止掉。根据默认的过滤内容看来,假如发帖子内容为英文似乎是几乎无法发表的。另外,在定义论坛风格时有时会要用一些特殊字符(如百分号“%”)假如这些特殊字符被过滤的对象,那么整个论坛就不能正常运行了。对上面提到的题目,我用dvbbs做过测试,结果与我猜想的是完全一致的。
解决上述题目的方法是只在需要过滤的文件中防注进连接语句。但这样工作量比较大,而且一般站长是不知道什么文件需要过滤的。因此我的建议是把过滤代码加到conn.asp后,然后再建一个不包含过滤代码的connl.asp,把肯定不需要过滤且过滤代码对本文件运行有影响的文件连接到conn1.asp,但要留意两个数据连接文件的基本内容要保持一致。另外,在风格设置中最好不要用到过滤的字符,确实要用到的可在防注进程序中删掉对该字符的过滤。
上面讲的是防注进程序对站点运行的影响,并不能造成什么危害。实在,真正的危害来自数据记录部分,我们来看这部分的代码:
''--------写进数据库-------头--------
Fy_dbstr="DBQ="+server.mappath("SqlIn.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set Fy_db=Server.CreateObject("ADODB.CONNECTION")
Fy_db.open Fy_dbstr
Fy_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','GET','"&Fy_Get&"','"&replace(Request.QueryString(Fy_Get),"'","''")&"')")
Fy_db.close
Set Fy_db = Nothing
'--------写进数据库-------尾--------
Response.Write "<Script Language=JavaScript>alert('枫网SQL通用防注进系统提示↓\n\n请不要在参数中包含非法字符尝试注进!\n\nHTTP://WwW.WrSkY.CoM 系统版本:V2.0(ASP)完美版');<Script>
Response.Write "非法操纵!系统做了如下记录↓<br>"
Response.Write "操纵IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操纵时间:"&Now&"<br>
esponse.Write "操纵页面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交参数:"&Fy_Get&"<br>"
Response.Write "提交数据:"&Request.QueryString(Fy_Get)
Response.End
End If
Next
Next
End If
'----------------------------------
这段代码的作用是对攻击者的信息及动作记录,以便我们采取必要的应对措施。
SQL注进程序带来的攻击及防范基于我们程序本身的技术,我们应不断的提升和完善SQL技术,积极防范SQL注进程序带来的攻击。
本文由武汉网站建设专家—武汉双军原创:http://www.twoarmy.com,转载请注明出处。