Question to say "I can!"

ASP網頁防SQL注入的代碼

2013-10-29

近日筆者的小站遭受到SQL入侵,于是上網搜索了一些相關防SQL注入的方法。

版本頗多,有人覺得這段好用,有人以為那段才行,因此綜合整理了一下,包含以下幾種:

以下為引用的內容:
<%
Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx
'---定義部份 頭------
Fy_Cl = 1 '處理方式:1=提示信息,2=轉向頁面,3=先提示再轉向
Fy_Zx = "index.Asp" '出錯時轉向的頁面
'---定義部份 尾------

On Error Resume Next
Fy_Url=Request.ServerVariables("QUERY_STRING")
Fy_a=split(Fy_Url,"&")
redim Fy_Cs(ubound(Fy_a))
On Error Resume Next
for Fy_x=0 to ubound(Fy_a)
Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),"=")-1)
Next
For Fy_x=0 to ubound(Fy_Cs)
If Fy_Cs(Fy_x)<>"" Then
If Instr(LCase(Request(Fy_Cs(Fy_x))),"'")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"select")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"update")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"chr")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"delete%20from")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),";")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"insert")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"mid")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))),"master.")<>0 Then
Select Case Fy_Cl
Case "1"
Response.Write "<Script Language=JavaScript>alert(' 出現錯誤!參數 "&Fy_Cs(Fy_x)&" 的值中包含非法字符串!\n\n 請不要在參數中出現:and,select,update,insert,delete,chr 等非法字符!\n\n我已經設置了不能SQL注入,請不要對我進行非法手段!');window.close();</Script>"
Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Fy_Zx&"'</Script>"
Case "3"
Response.Write "<Script Language=JavaScript>alert(' 出現錯誤!參數 "&Fy_Cs(Fy_x)&"的值中包含非法字符串!\n\n 請不要在參數中出現:,and,select,update,insert,delete,chr 等非法字符!\n\n設計了門,非法侵入請離開,謝謝!');location.href='"&Fy_Zx&"';</Script>"
End Select
Response.End
End If
End If
Next
%>

以上代碼為較多網友所用,從使用的感言來看,效果顯著。

以下為引用的內容:
Dim Query_Badword,Form_Badword,Err_Message,Err_Web,form_name

'------定義部份 頭----------------------------------------------------------------------

Err_Message = 1 '處理方式:1=提示信息,2=轉向頁面,3=先提示再轉向
Err_Web = "Err.Asp" '出錯時轉向的頁面
Query_Badword="'‖and‖select‖update‖chr‖delete‖%20from‖;‖insert‖mid‖master.‖set‖chr(37)‖="
'在這部份定義get非法參數,使用"‖"號間隔
Form_Badword="'‖%‖&‖*‖#‖@‖=‖select‖and‖set‖delete" '在這部份定義post非法參數,使用"‖"號間隔

'------定義部份 尾-----------------------------------------------------------------------
'
On Error Resume Next
'----- 對 get query 值 的過濾.
if request.QueryString<>"" then
Chk_badword=split(Query_Badword,"‖")
FOR EACH Query_form_name IN Request.QueryString
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.QueryString(Query_form_name)),Chk_badword(i))<>0 Then
Select Case Err_Message
Case "1"
Response.Write "<Script Language=JavaScript>alert('傳參錯誤!參數 "&form_name&" 的值中包含非法字符串!\n\n請不要在參數中出現:and update delete ; insert mid master 等非法字符!');window.close();</Script>"
Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
Case "3"
Response.Write "<Script Language=JavaScript>alert('傳參錯誤!參數 "&form_name&"的值中包含非法字符串!\n\n請不要在參數中出現:and update delete ; insert mid master 等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
End if

'-----對 post 表 單值的過濾.
if request.form<>"" then
Chk_badword=split(Form_Badword,"‖")
FOR EACH form_name IN Request.Form
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.form(form_name)),Chk_badword(i))<>0 Then
Select Case Err_Message
Case "1"
Response.Write "<Script Language=JavaScript>alert('出錯了!表單 "&form_name&" 的值中包含非法字符串!\n\n請不要在表單中出現: % & * # ( ) 等非法字符!');window.close();</Script>"
Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
Case "3"
Response.Write "<Script Language=JavaScript>alert('出錯了!參數 "&form_name&"的值中包含非法字符串!\n\n請不要在表單中出現: % & * # ( ) 等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
end if

以上是另一種版本。

以下為引用的內容:
<%
Dim?GetFlag?Rem(提交方式)
Dim?ErrorSql?Rem(非法字符)
Dim?RequestKey?Rem(提交數據)
Dim?ForI?Rem(循環標記)
ErrorSql?=?"'~;~and~(~)~exec~update~count~*~%~chr~mid~master~truncate~char~declare"?Rem(每個敏感字符或者詞語請使用半角?"~"?格開)
ErrorSql?=?split(ErrorSql,"~")
If?Request.ServerVariables("REQUEST_METHOD")="GET"?Then
GetFlag=True
Else
GetFlag=False
End?If
If?GetFlag?Then
For?Each?RequestKey?In?Request.QueryString
For?ForI=0?To?Ubound(ErrorSql)
If?Instr(LCase(Request.QueryString(RequestKey)),ErrorSql(ForI))<>0?Then
response.write?"<script>alert(""警告:\n請不要做任何嘗試"");location.href=""index.asp"";</script>"
Response.End
End?If
Next
Next
Else
For?Each?RequestKey?In?Request.Form
For?ForI=0?To?Ubound(ErrorSql)
If?Instr(LCase(Request.Form(RequestKey)),ErrorSql(ForI))<>0?Then
response.write?"<script>alert(""警告:\n請不要做任何嘗試"");location.href=""index.asp"";</script>"
Response.End
End?If
Next
Next
End?If
%>

將上述代碼放入conn文件中即可,功能較全面……

若您有相關經歷或好的防注方法,歡迎留言交流^_^

另外,亦可參考網絡上較為成熟的ASP的cms里所用的防注入程序,不管如何,只想向那些代碼入侵的無聊者說:善待他人就是成全自己。(wolf4ever)

作者:admin | Categories:系統問題 | Tags:

一條評論

  1. admin說道:

    asp sql 通用防注入3.2 最新版:
    http://www.jb51.net/codes/9905.html
    這個也應該很好用。

發表評論

電子郵件地址不會被公開。 必填項已用*標注

*

澳洲f1赛车b盘开奖套路 佳永正规配资网站-深圳佳勇网络科技有限公司 赌场任务 福建11选5遗漏数据怎么看 体育彩票7位数奖金多少 陕西快乐10分推荐号 不懂股票的人怎么玩 河南福彩22选5最新一期 真钱澳门网投 福彩p62开奖公告 网上真钱的棋牌哪家好 管家婆图库 赛车有哪些种 福彩快乐12 天天彩选4开奖结果 天津11选5万能八码 11选5旋转矩阵稳赚