在建站的时候,很多朋友会问,如何防止SQL注入,网上搜下 会有很多的资料,我在这里也整理了下,仅供参考。
下面这些代码是比较通用的,但是在很多传递内容中也会含有以下这些特殊字符,其实要真正做到防止注入又不跟网站的内容冲突,仅有以下代码是不够的,你要对每个参数传过来的值进行类型判断、特殊字符过滤等。特别要注意英文的单引号。
Dim Query_Badword,Form_Badword,i,Err_Message,Err_Web,name
------定义部份 头----------------------------------------------------------------------
Err_Message = 1 处理方式:1=提示信息,2=转向页面,3=先提示再转向
Err_Web = "Err.Asp" 出错时转向的页面
Query_Badword="∥an d∥se lect∥up date∥ch r∥de l ete∥%20fr om∥;∥ins ert∥mi d∥mas ter.∥se t∥ch r(37)"
在这部份定义get非法参数,使用"∥"号间隔
For m_Badword="∥%∥&∥×∥#" 在这部份定义post非法参数,使用"∥"号间隔
------定义部份 尾-----------------------------------------------------------------------
On Error Resume Next
----- 对 get query 值 的过滤.
if req uest.QueryString<>"" then
Chk_badword=split(Query_Badword," / /")
FOR EACH Query_Name IN Requ est.QueryString
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.QueryString(Query_Name)),Chk_badword(i))<>0 Then
Sele ct Case Err_Message
Case "1"
Response.Write "
"
Case "2"
Response.Write "
"
Case "3"
Response.Write "
"
End Sele ct
Response.End
End If
NEXT
NEXT
End if
-----对 post 表 单值的过滤.
if requ est.form<>"" then
Chk_badword=split(Form_Badword,"/ /")
FOR EACH name IN Request.Form
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.form(name)),Chk_badword(i))<>0 Then
Sel ect Case Err_Message
Case "1"
Response.Write "
"
Case "2"
Response.Write "
"
Case "3"
Response.Write "
"
End Sel ect
Response.End
End If
NEXT
NEXT
end if