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