IIS傳遞給asp.dll的get 請求是是以字符串的形式,,當 傳遞給Request.QueryString數據后,asp解析器會分析Request.QueryString的信息,,然后根據"&",分出各個數組內的數據所以get的攔截如下:
首先我們定義請求中不能包含如下字符:
'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare
各個字符用"|"隔開,,然后我們判斷的得到的Request.QueryString,具體代碼如下 :
dim sql_injdata
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 "<Script Language=****>alert('SQL通用防注入系統提示↓nn請不要在參數中包含非法字符嘗試注入!');history.back(-1)</Script>"
Response.end
end if
next
Next
End If
這樣我們就實現了get請求的注入的攔截,但是我們還要過濾post請求,所以我們還得繼續考慮request.form,這個也是以數組形式存在的,我們只需要再進一次循環判斷即可。代碼如下:
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 "<Script Language=****>alert('SQL通用防注入系統提示↓nn請不要在參數中包含非法字符嘗試注入!nnHTTP://www.521movie.com ');history.back(-1)</Script>"
Response.end
end if
next
next
end if
好了大功告成,我們已經實現了get和post請求的信息攔截,你只需要在conn.asp之類的打開數據庫文件之前引用這個頁面即可。放心的繼續開發你的程序,不用再考慮是否還會受到SQL注入攻擊。難道不是么?
本欄文章均來自于互聯網,版權歸原作者和各發布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用于商業或者其他目的。( ProgramFan.Com )
文章來源于領測軟件測試網 http://www.kjueaiud.com/