网络安全 频道

ASP防注入简单易行

思彤[F.W.S.T]
 
现在网络的免费资源丰富,各位小菜早已经有了自己的叶子了吧。我相信很多小菜也像我一样不太懂ASP、PHP等等脚本语言而去使用那方便的整站程序吧。而有时一些功能或结构我们比较满意却有ASP注入而使我们不得不做其它选择。所以在下总结下学习经验与众小菜分享,请大虾看过勿笑。
 
现在比较流行的SQL注入工具的工作方式是通过GET和POST来完成具体的注入。我们可以将注入时所用到的一切符号过滤掉。那么我们可以通过简单的判断语句来达到目的。我们先来过滤GET吧。
 
代码如下:
  dim sql_injdata SQL_inj SQL_Get
SQL_injdata =
"’|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
If Request.QueryString"" Then
For Each SQL_Get In
Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if
instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write "alert(’请不要在参数中包含非法字符尝试注入!’);history.back(-1)"
Response.end
end if
next
Next
End If
 
这样我们通过简单的语句我们就把一些注入所必须的语句和符号过滤掉了。非常小巧灵便,只要插到像conn.asp这样类似被调用比较广泛的页面中。同样POST我们也可以通过如下代码过滤,我们可以将两段代码整和到一起。
 
我们来看看代码吧:
If Request.Form"" Then
For Each Sql_Post In
Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
if
instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.Write
"alert(’请不要在参数中包含非法字符尝试注入!  
’);history.back(-1)"
Response.end
end if
next
next
end if
  网上又流行一个加强版的ASP防注代码。
  代码如下:
""
Then
 For Each req_F In Request.Form
   N_check
req_F,Request.Form(req_F),"POST"
 Next
 end if
end sub
'检测Request.QueryString
sub N_check_Qs()
 If
Request.QueryString"" Then
  For Each req_Qs In
Request.QueryString
   N_check
req_Qs,Request.QueryString(req_Qs),"GET"
  Next
 end if
end
sub
'检测
sub N_check(ag,agsql,sqltype)
 For N_i=0 To
Ubound(N_noarray)
  If Instr(LCase(agsql),N_noarray(N_i))0
Then
  call N_regsql(ag,agsql,sqltype)
  Response.Write
"MO"
  end if
 Next
end sub
'记录并停止输出
'ag 名称
'agsql 内容
'sqltype 类型
sub
N_regsql(ag,agsql,sqltype)
 if(sqltype"OTHER") then
 
Conn.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ)
values('"&N_userip&"','"&N_thispage&"','"&sqltype&"','"&ag&"','"&agsql&"')")
 end
if
  Response.Write "alert('请不要在参数中包含非法字符尝试注入!');"
 
Response.Write "非法操作!系统做了如下记录↓
"
  Response.Write
"操作IP:"&N_userip&"
"
  Response.Write
"操作时间:"&Now&"
"
  Response.Write
"操作页面:"&N_thispage&"
"
  Response.Write
"提交方式:"&sqltype&"
"
  Response.Write
"提交参数:"&ag&"
"
  Response.Write
"提交数据:"&agsql&""
   
 
Response.end
end sub
Sub
DBopen()
 N_dbstr="DBQ="+server.mappath("Sql.mdb")+";DefaultDir=;DRIVER={Microsoft
Access Driver (*.mdb)};"
 Set
Conn=Server.CreateObject("ADODB.CONNECTION")
 Conn.open N_dbstr
end
SUB
Sub DBCLose()
 Conn.close
 Set Conn = Nothing
End
sub
%>
 
代码说明里面写的很明白将本页用include方法放在头部以让所有页都可以调用,比如include在conn.asp里,如果有流式上传的页面请把该页加到表page中,以防form冲突。代码比前面的严谨的多,而且多了IP记录等功能。
 
我们还可以通过枫知秋写的防注入程序来达到目的。
 
防范ASP注入的方法有很多,在下只是把众多方法中的一点点与大家拿出来分享,希望大家写出更好的防范方法。
   (我们小组迟点会开放了,希望大家多多支持哦)
0
相关文章