點評:本文對常見的16種WEB攻擊,給出瞭部分解決方案。
事實上,WEB應用是很脆弱的。因為這種應用的靈活性很大,用戶輸入的自由度也很高,所以對於WEB應用的惡意攻擊也比較容易。
本文對常見的16種WEB攻擊,給出瞭部分解決方案。
1. SQL註入(SQL Injection)
對於固定的SQL語句,一般在應用程序層不做處理,推薦添加一個包裝類,把這些固定的SQL操作控制起來。
而對於動態生成的SQL語句,就需要對用戶的輸入進行處理,一般的處理是把【’】轉換成【“】 。
如:
abc”def”ghi’jkl’mno →abc”def”ghi’’jkl’’mno
2. 跨站點腳本攻擊(XSS,Cross Site Scripting)
如果用戶輸入,URL參數在頁面上表示時,必須對特殊文字進行過濾處理。
2-1 如果用戶輸入和URL參數中含有下列敏感文字,則刪除 之:
Script Object Embed Applet
2-2 如果用戶輸入和URL參數中含有下列敏感文字,則轉換 之:
& → &
< → <
> → >
“ → "
‘ → '
3. 操作系統命令註入(OS Command Injection)
要盡量避免執行系統命令,如果非使用不可的話,要對以下的用戶輸入或者參數做處理:
| ! & ` 命令執行總要使用的字符
“ ‘ 字符串的區分字符
/ – 命令參數指定時使用的字符
“. / ¥ 目錄指定時使用的字符
< > 文件操作是使用的字符
$ 環境變量指定時使用的字符
( { [ ] } ) 命令間的區分字符
4. 換行字符註入(Line Feed Code Injection)
在用戶的輸入信息中,檢查是否不包含【0x0d】【0x0a】 這種換行的輸入。
5. LDAP註入(LDAP Injection)
在LDAP使用的場合,要檢查用戶輸入信息中,是否不包含下列LDAP的保留字:
( ) * ¥ NULL
6. Xpath註入(XPath Injection)
在XPath使用的場合,要檢查用戶輸入信息中,是否不包含下列Xpath的保留字:
< > “ ‘ &
7. SSI註入(SSI Injection)
檢查用戶輸入中,是否不包含SSI相關的危險關鍵字。
8. 目錄遍歷(Directory Traversal)
檢查用戶輸入中,是否不包含訪問文件系統的特殊文字【/】 和【\】 。
9. 強制瀏覽(Forced Browsing)
這種攻擊的防止比較復雜,一般的策略是:
驗證請求是否是從合法的頁面發送而來的,一般是檢查請求的Referer。
用戶授權控制,認證認可
對於靜態資源來說,WEB程序是無法防止這種強制瀏覽攻擊的,隻有通過設置中間件(如WEB服務器)來防止:
對公開化網站目錄的設定(比如在站點目錄下禁止顯示文件列表)
在URL中指定目錄的時候,必須提供index文件(如index.html等)
對於下載文件的存放位置,要特別謹慎的設置
10. 跨站點請求偽裝(Cross Site Request Forgery)
明確頁面的操作流程,對於不符合操作流程而來的請求進行過濾。
11. 不正確的文件和目錄分配(Invalid Allocation of Files and Directories)
不公開的配置文件,備份文件,數據文件等,不要在站點的公共目錄(WebRoot或者www/htdocs)下存放
WEB應用程序使用的庫文件,不要再站點的公共目錄下存放。
適合在公共目錄下存放的資源如下所示:
/var/www/htdocs/
Img/
css/
data/
index.html
12. 不正確的錯誤處理(Invalid Error Handling)
一定要進行錯誤處理,錯誤處理的消息要顯示為用戶可理解的內容,不要把中間件(WEB服務器)的錯誤消息顯示出來。
13. 不必要的信息(Unnecessary Information)
比如在用戶登陸時,提示的這樣的錯誤信息【用戶密碼不正確】,從側面就說明瞭系統中存在一個叫做【userid】的用戶。這就為惡意攻擊者提供瞭情報。
所以,在處理系統顯示的消息是,點到為止,不能暴露多餘的用戶細節。
14. 後門和調試選項(Backdoor & Debug Option)
避免特殊的密碼輸入和認證策略
指定調試選項是,調試選項和程序的參數都可以改變和查看
要做出測試專用的頁面
對於程序後門,可以通過代碼復查力度強化來進行防止。
而對於調試選擇,要統一開發標準,使用統一的調試開關。
15. 客戶端註釋(Client Side Comment)
對於WEB應用來說,客戶端可以通過瀏覽器直接看到頁面的代碼。發送到瀏覽器的代碼中,可以開發者的註釋。對於惡意攻擊者來說,這些註釋信息會暴露出WEB應用的很多細節。
比如說下面所說的註釋就應該引起關註:
對於請求參數的註釋
Javascript的內部邏輯的註釋
註釋外的Javascript內部邏輯和URL請求
對應策略如下:
對於代碼的註釋,事先要有統一的代碼規范
盡量使用服務器端得註釋標簽,如JSP的【<%– –%>】,這樣的註釋內容不會發送到客戶端。
16. 緩沖區溢出(Buffer Over Flow)
如果用戶輸入中包含瞭超過服務器緩沖區大小的輸入,很可能會導致服務器存儲不足,甚至導致服務器停機。
對策如下:
一定要檢查用戶輸入的大小
文件上傳是,對於上傳文件的大小進行檢查和限制。