先總結(jié)一下常見(jiàn)的攻擊手法:
1. 依賴跨站漏洞,需要在被攻擊網(wǎng)站的頁(yè)面種入腳本的手法
1.1. Cookie 盜取,通過(guò)javascript 獲取被攻擊網(wǎng)站種下的cookie,并發(fā)送給攻擊者。
1.1.1. 從cookie 中提取密碼等隱私
1.1.2. 利用cookie 偽造session,發(fā)起重放攻擊
1.2. Ajex 信息盜取,通過(guò)javascript 發(fā)起ajex 請(qǐng)求。
1.2.1. 從ajex 結(jié)果中獲取隱私。
1.2.2. 模擬用戶完成多頁(yè)表單。
2. 不依賴跨站漏洞的手法
2.1. 單向HTTP 動(dòng)作,通過(guò)img.src 等方法發(fā)起跨站訪問(wèn),冒充被攻擊者執(zhí)行特權(quán)操作。但是很難拿到服務(wù)器的返回值。
2.2. 雙向HTTP 動(dòng)作,如果服務(wù)器產(chǎn)生一段動(dòng)態(tài)的script,那么可以用script.src 的方法發(fā)起跨站訪問(wèn)并拿到服務(wù)器的返回值。
防范手法如下:
1. 防堵跨站漏洞,阻止攻擊者利用在被攻擊網(wǎng)站上發(fā)布跨站攻擊語(yǔ)句不可以信任用戶提交的任何內(nèi)容,首先代碼里對(duì)用戶輸入的地方和變量都需要仔細(xì)檢查長(zhǎng)度和對(duì)”<”,”>”,”;”,”’”等字符做過(guò)濾;其次任何內(nèi)容寫(xiě)到頁(yè)面之前都必須加以encode,避免不小心把html tag 弄出來(lái)。這一個(gè)層面做好,至少可以堵住超過(guò)一半的XSS 攻擊。
2. Cookie 防盜
首先避免直接在cookie 中泄露用戶隱私,例如email、密碼等等。其次通過(guò)使cookie 和系統(tǒng)ip 綁定來(lái)降低cookie 泄露后的危險(xiǎn)。這樣攻擊者得到的cookie 沒(méi)有實(shí)際價(jià)值,不可能拿來(lái)重放。
3. 盡量采用POST 而非GET 提交表單
POST 操作不可能繞開(kāi)javascript 的使用,這會(huì)給攻擊者增加難度,減少可利用的
跨站漏洞。
4. 嚴(yán)格檢查refer
檢查http refer 是否來(lái)自預(yù)料中的url。這可以阻止第2 類攻擊手法發(fā)起的http 請(qǐng)求,也能防止大部分第1 類攻擊手法,除非正好在特權(quán)操作的引用頁(yè)上種了跨站訪問(wèn)。
5. 將單步流程改為多步,在多步流程中引入效驗(yàn)碼
多步流程中每一步都產(chǎn)生一個(gè)驗(yàn)證碼作為hidden 表單元素嵌在中間頁(yè)面,下一步操作時(shí)這個(gè)驗(yàn)證碼被提交到服務(wù)器,服務(wù)器檢查這個(gè)驗(yàn)證碼是否匹配。
首先這為第1 類攻擊者大大增加了麻煩。其次攻擊者必須在多步流程中拿到上一步產(chǎn)生的效驗(yàn)碼才有可能發(fā)起下一步請(qǐng)求,這在第2 類攻擊中是幾乎無(wú)法做到的。
6. 引入用戶交互
簡(jiǎn)單的一個(gè)看圖識(shí)數(shù)可以堵住幾乎所有的非預(yù)期特權(quán)操作。
7. 只在允許anonymous 訪問(wèn)的地方使用動(dòng)態(tài)的javascript。
8. 對(duì)于用戶提交信息的中的img 等link,檢查是否有重定向回本站、不是真的圖片等
可疑操作。
9. 內(nèi)部管理網(wǎng)站的問(wèn)題
很多時(shí)候,內(nèi)部管理網(wǎng)站往往疏于關(guān)注安全問(wèn)題,只是簡(jiǎn)單的限制訪問(wèn)來(lái)源。這種網(wǎng)站往往對(duì)XSS 攻擊毫無(wú)抵抗力,需要多加注意。安全問(wèn)題需要長(zhǎng)期的關(guān)注,從來(lái)不是一錘子買(mǎi)賣。XSS 攻擊相對(duì)其他攻擊手段更加隱蔽和多變,和業(yè)務(wù)流程、代碼實(shí)現(xiàn)都有關(guān)系,不存在什么一勞永逸的解決方案。此外,面對(duì)XSS,往往要犧牲產(chǎn)品的便利性才能保證完全的安全,如何在安全和便利之間平衡也是一件需要考慮的事情。
web應(yīng)用開(kāi)發(fā)者注意事項(xiàng):
1.對(duì)于開(kāi)發(fā)者,首先應(yīng)該把精力放到對(duì)所有用戶提交內(nèi)容進(jìn)行可靠的輸入驗(yàn)證上。這些提交內(nèi)容包括URL、查詢關(guān)鍵
字、http頭、post數(shù)據(jù)等。只接受在你所規(guī)定長(zhǎng)度范圍內(nèi)、采用適當(dāng)格式、你所希望的字符。阻塞、過(guò)濾或者忽略其它的
任何東西。
2.保護(hù)所有敏感的功能,以防被bots自動(dòng)化或者被第三方網(wǎng)站所執(zhí)行。實(shí)現(xiàn)session標(biāo)記(session tokens)、
CAPTCHA系統(tǒng)或者HTTP引用頭檢查。
3.如果你的web應(yīng)用必須支持用戶提供的HTML,那么應(yīng)用的安全性將受到災(zāi)難性的下滑。但是你還是可以做一些事來(lái)
保護(hù)web站點(diǎn):確認(rèn)你接收的HTML內(nèi)容被妥善地格式化,僅包含最小化的、安全的tag(絕對(duì)沒(méi)有JavaScript),去掉任何
對(duì)遠(yuǎn)程內(nèi)容的引用(尤其是樣式表和JavaScript)。為了更多的安全,請(qǐng)使用httpOnly的cookie。