日期:2014-05-17  浏览次数:21204 次

关于网站防注入的一点疑问?
看了些前辈们总结的防注方面的资料,认识到网站防注大概有两种方法:
方法一:
在接出数据的时候使用函数检测,
Function   SafeRequest(ParaName,ParaType)
              '---   传入参数   ---
              'ParaName:参数名称-字符型
              'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)

              Dim   ParaValue
              ParaValue=Request(ParaName)
              If   ParaType=1   then
                            If   ParaValue= " "   or   not   isNumeric(ParaValue)   then
                                          Response.write   "参数 "   &   ParaName   &   "必须为数字型! "
                                          Response.end
                            End   if
              Else
                            ParaValue=replace(ParaValue, " ' ", " ' ' ")
              End   if
              SafeRequest=ParaValue
End   function

方法二:
在链接数据库的文件中加入如下代码:
<%
On   Error   Resume   Next
dim   sql_leach,sql_leach_0,Sql_DATA,SQL_Get,Sql_Post  
sql_leach   =   " ',and,exec,insert,select,delete,%,*,update,count,chr,mid,master,truncate,char,declare "
sql_leach_0   =   split(sql_leach, ", ")

If   Request.QueryString <> " "   Then
For   Each   SQL_Get   In   Request.QueryString
For   SQL_Data=0   To   Ubound(sql_leach_0)
if   instr(Request.QueryString(SQL_Get),sql_leach_0(Sql_DATA))> 0   Then
Response.Write   "请不要在参数中使用 ',and,insert,select,delete等字符! "
Response.end
end   if
next
Next
End   If

If   Request.Form <> " "   Then
For   Each   Sql_Post   In   Request.Form
For   SQL_Data=0   To   Ubound(sql_leach_0)
if   instr(Request.Form(Sql_Post),sql_leach_0(Sql_DATA))> 0   Then
Response.Write   "请不要在参数中使用 ',and,insert,select,delete等字符! "
Response.end
end   if
next
next
end   if
%>

现在问题是这样的,我的网站已经完成,用方法一的话好多网页都要改动,比较麻烦,就用了方法二,但用这种方法时当用户填写留言时就不能出现 " ',and,exec,insert,select,delete,%,*,update,
count,chr,mid,master,truncate,char,declare "这些字符了.可and,%也是常用的字符呀!
不知大家是用什么方法防注的?
有没有更好的方法呀?

------解决方案--------------------
使用RecordSet对象来操作,就可以防止injection
我个人比较喜欢使用RecordSet操作数据库,牺牲一些性能换取安全性,我认为比较值得~
------解决方案--------------------
鱼与熊撑不可得兼.
我总是用第一种方法.
------解决方案--------------------
我用方法一,把它做一点小小的改动,
ParaValue=replace(ParaValue, " ' &q