SQL注入已經成為目前網站攻擊的主流,隨便哪個菜鳥黑客從網上下載個SQL注入工具就可以進行網站攻擊了,這真是讓那些程序員心寒啊,辛苦好久的傑作被這些菜鳥就給攻擊了,難道就沒有辦法對付他們了嗎?當然有辦法,SQL注入一般的http請求不外乎get和post,所以只要我們在文件中過濾所有post或者get請求中的參數信息中非法字符,就可以防SQL注入攻擊。
IIS傳遞給asp.dll的get請求是以字符串的形式,當傳遞給Request.QueryString數據後,asp解析器會分析Request.QueryString的信息,然後根據"&",分出各個數組內的數據。下面分別列出get攔截和post攔截的代碼:
'======get攔截======
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='javascript'>alert('HTMer.com系統提示↓nn請不要在參數中包含非法字符嘗試注入!nnHTTP://www.xx.com');history.back(-1)</Script>"
Response.end
end if
next
next
end If
'======post攔截======
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='javascript'>alert('HTMer.com系統提示↓nn請不要在參數中包含非法字符嘗試注入!nnHTTP://www.xx.com');history.back(-1)</Script>"
Response.end
end if
next
next
end if
好了,我們已經實現了get和post請求的信息攔截,你只需要在conn.asp之類的打開數據庫文件之前引用這個頁面即可。