关于网站防注入的一点疑问?
看了些前辈们总结的防注方面的资料,认识到网站防注大概有两种方法:
方法一:
在接出数据的时候使用函数检测,
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