Dreamweaver中sql注入式攻擊的防範

Dreamweaver+ASP可視化編程門檻很低,新手很容易上路。在很短的時間裏,新手往往就已經能夠編出看來比較完美的動態網站,在功能上,老手能做到的,新手也能夠做到。那麼新手與老手就沒區別了嗎?這裏面區別可就大了,只不過外行人很難一眼就看出來罷了。界面的友好性、運行性能以及網站的安全性方面是新手與老手之間區別的三個集中點。

在安全性方面,新手最容易忽略的問題就是SQL注入漏洞的問題。用NBSI 2.0對網上的一些ASP網站稍加掃描,就能發現許多ASP網站存在SQL注入漏洞。
所謂SQL注入(SQL injection),就是利用程序員對用戶輸入數據的合法性檢測不嚴或不檢測等設計上的漏洞,故意從客戶端提交特殊的代碼(SQL命令),收集程序及服務器的信息,獲取想得到的資料而進行的攻擊。

可見Sql注入攻擊得逞的主要原因沒有對用戶輸入的數據進行驗證,可以從客戶端動態生成Sql命令。
一般的http請求不外乎get 和 post,所以只要我們在程序中過濾所有post或者get請求的參數信息中非法字符,即可實現防範SQL注入攻擊。

遺憾的是DW並沒有提供相關代碼,因此要想防範SQL注入式攻擊就需要手工修改,
只要將下面的程序保存爲SQLinjection.asp,然後在需要防注入的頁面頭部調用
<!--#Include File="SQLinjection.asp"-->
就可以做到頁面防注入.

如果想整站防注,就在DW生成的Connections目錄下的數據庫連接文件中添加頭部調用或直接添加下面程序代碼,需要注意的是,在添加到數據庫連接文件中,可能在後臺表單添加文章等內容時,如遇到SQL語句系統會誤認爲SQL攻擊而提示出錯。

通用程序代碼(引自網絡做適當更改)如下:

<%
'--------定義部份------------------
dim sql_injdata
SQL_injdata = "'|and|exec|insert|select|delete
|update|count|*|%|chr|mid|master|truncate|char
|declare|1=1|1=2|;"
SQL_inj = split(SQL_Injdata,"|"

'--------POST部份------------------
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('系統提示你!/n/n請不要在參數中包含非法字符嘗試注入!/n/n');window.location="&"'"&"index.htm"&"'"&";</Script>"
Response.end
end if
next
Next
End If

'--------GET部份-------------------
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('系統提示你!/n/n請不要在參數中包含非法字符嘗試注入!/n/n');window.location="&"'"&"index.htm"&"'"&";</Script>"
Response.end
end if
next
next
end if
%>


通過上面的程序,就可以實現抵禦從Get方法或Post方法提交的危險SQL注入字符,並警告入侵者後轉向到index.htm(首頁)。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449953.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章