


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