讓ASP自動(dòng)防護(hù)腳本注入
SQL Injection可以說是當(dāng)前網(wǎng)絡(luò)環(huán)境中的主流攻擊手段之一,如何有效防止腳本注入一直困擾著廣大程序設(shè)計(jì)者。在程序設(shè)計(jì)中,往往一個(gè)小的疏忽,就可能導(dǎo)致系統(tǒng)被注入,甚至帶來嚴(yán)重的后果。對(duì)于腳本注入,總結(jié)起來,有以下兩種情況:
過濾策略考慮不周。比如說程序中只過濾了單引號(hào),其實(shí)上我們可以饒過單引號(hào)繼續(xù)注入;
過濾變量不全。由于過濾策略只針對(duì)具體的單一的變量,往往會(huì)漏掉對(duì)某些變量的過濾。
本文就是針對(duì)上述問題而提出的一種通用的解決方案。
相關(guān)知識(shí)
在ASP程序數(shù)據(jù)傳遞中, 客戶端(Browser)向服務(wù)器提交請(qǐng)求有三種方法:Head、Get和Post。通過Header方法,服務(wù)器只向客戶端返回網(wǎng)頁的頭信息,而不是數(shù)據(jù)本身。實(shí)際上,數(shù)據(jù)傳遞只通過了GET和 POST這兩種方法,即在Form表單中Method屬性值(缺省為GET)。
假如使用“GET”屬性,瀏覽器將該值綁定在頁面所有控件上,成為一個(gè)查詢字符串,且附在被請(qǐng)求頁面的URL上(經(jīng)過URL編碼)。當(dāng)這個(gè)請(qǐng)求到達(dá)Web服務(wù)器時(shí),其值由ASP的Request.QueryString集合提供。假如設(shè)置METHOD屬性為“POST”,瀏覽器將值包裝進(jìn)發(fā)送服務(wù)器的HTTP報(bào)頭中,通過Request.Form集合提供給ASP。
經(jīng)URL編碼的字符串長度存在一定的限制,其上限值為1024字節(jié)。因此,過長的字符串可能會(huì)引起溢出和字符被截掉。同時(shí),查詢字符串出現(xiàn)在瀏覽器的地址欄和所有的保存的鏈接和收藏夾中。不僅如此,還顯露了通過Web服務(wù)器時(shí)在HTTP請(qǐng)求中不想顯示的值,它也可能出現(xiàn)你的服務(wù)器和其他路由服務(wù)器的日志文件中。而通過POST傳遞的數(shù)值(在HTTP請(qǐng)求報(bào)頭中的值)是不會(huì)出現(xiàn)在日志文件中的。
過濾原理
通過以上的介紹,我們已經(jīng)知道服務(wù)器獲取客戶端的數(shù)據(jù)是通過Request.QueryString集合(GET方法)和Request.Form集合(POST方法)來實(shí)現(xiàn)的。所以,如果我們?cè)诔绦蛑袡z查Request.QueryString集合和Request.Form集合的值,并過濾掉特殊字符,就達(dá)到了字符過濾的目的,而不必針對(duì)具體的變量編寫程序。實(shí)現(xiàn)方法如下:
If Request.Form”" Then
For Each Data In Request.Form
‘對(duì)Data應(yīng)用過濾策略,當(dāng)出現(xiàn)非法字符時(shí)執(zhí)行相應(yīng)的處理程序
Next
End If
If Request.QueryString”" Then
For Each Data In Request.QueryString
‘對(duì)Data應(yīng)用過濾策略,當(dāng)出現(xiàn)非法字符時(shí)執(zhí)行相應(yīng)的處理程序
Next
End If
通用系統(tǒng)解決方案
由于SQL注入是發(fā)生在執(zhí)行SQL語句的時(shí)候,也就是說發(fā)生在對(duì)數(shù)據(jù)庫操作的頁面,所以我們?cè)谟袛?shù)據(jù)庫操作的頁面將從客戶端傳遞來的數(shù)據(jù)進(jìn)行過濾,就可以全面防止SQL注入。因此,只需在數(shù)據(jù)庫連接的文件(如:conn.asp)應(yīng)用過濾策略,就可以達(dá)到全面過濾的目的。在實(shí)際應(yīng)用中,我們將過濾策略文件包含到數(shù)據(jù)庫連接的文件中即可。
在實(shí)際應(yīng)用中,我們可以過濾策略(非法字符)存放在數(shù)據(jù)庫中,實(shí)現(xiàn)過濾策略的靈活管理。同時(shí),我們可以針對(duì)特定的過濾策略,指定相應(yīng)的處理過程:當(dāng)出現(xiàn)非法字符時(shí),是停止程序運(yùn)行還是后臺(tái)記錄,或者是將程序?qū)蝈e(cuò)誤提示頁面;對(duì)于后臺(tái)記錄數(shù)據(jù),管理員可以查看系統(tǒng)日志,并根據(jù)實(shí)際情況對(duì)訪問IP進(jìn)行封鎖;對(duì)于IP封鎖,我們也可以制定相應(yīng)的策略,對(duì)撥號(hào)帳號(hào)實(shí)行臨時(shí)封鎖,如12小時(shí),對(duì)固定IP實(shí)行長期封鎖等等。
關(guān)健詞:ASP,自動(dòng)防腳本
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解