編寫通用的asp防注入程序選擇自ph4studio的Blog
關鍵字編寫通用的asp防注入程序
出處
sql注入被那些菜鳥級別的所謂黑客高手玩出了滋味,,發現現在大部分黑客入侵都是基於sql注入實現的
,哎,,誰讓這個入門容易呢,好了,,不說廢話了,,現在我開始說如果編寫通用的sql防注入程序
一般的http請求不外乎get和post,所以只要我們在文件中過濾所有post或者get請求中的參數信息中
非法字符即可,所以我們實現http請求信息過濾就可以判斷是是否受到sql注入攻擊。
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
具體代碼如下
dimsql_injdata
SQL_injdata="'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj=split(SQL_Injdata,"|")
IfRequest.QueryString<>""Then
ForEachSQL_GetInRequest.QueryString
ForSQL_Data=0ToUbound(SQL_inj)
ifinstr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0Then
Response.Write"<ScriptLanguage=****>alert('天下電影聯盟SQL通用防注入系統提示↓nn請不要在參數中包含非法字符嘗試注入!');history.back(-1)</Script>"
Response.end
endif
next
Next
EndIf
這樣我們就實現了get請求的注入的攔截,但是我們還要過濾post請求,所以我們還得繼續考慮request.form,這個也是以數組形式存在的,,我們只需要再進一次循環判斷即可。代碼如下
IfRequest.Form<>""Then
ForEachSql_PostInRequest.Form
ForSQL_Data=0ToUbound(SQL_inj)
ifinstr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0Then
Response.Write"<ScriptLanguage=****>alert('天下電影聯盟SQL通用防注入系統提示↓nn請不要在參數中包含非法字符嘗試注入!nnHTTP://www.521movie.com');history.back(-1)</Script>"
Response.end
endif
next
next
endif
好了大功告成,,我們已經實現了get和post請求的信息攔截,,你只需要在conn.asp之類的打開數據庫文件之前引用這個頁面即可。放心的繼續開發你的程序,,不用再考慮是否還會受到sql注入攻擊。難道不是麼?