一 XSS攻擊進階
1 XSS攻擊平臺
攻擊平臺的主要目的就是為了演示xss的危害,以及方便測試使用,常見的有attack API,BeFF,XSS-Proxy
2終極武器:XSSWorm
(以往的蠕蟲都是利用服務(wù)器端軟件漏洞進行傳播的)
像有名的samy worm和百度空間蠕蟲
xss worm攻擊是有一定條件的:一般來說,用戶之間發(fā)生交互行為的頁面,如果存在存儲型XSS,則比較容易發(fā)起XSS worm攻擊。
3xss構(gòu)造技巧
比如利用字符編碼,
? ? ? 繞過長度限制(某些環(huán)境下可以用注釋符繞過長度限制),
? ? ? 使用<base>標(biāo)簽,
? ? ? Window.name的妙用(window對象是瀏覽器的窗體,而并非document對象,因此很多時候window對象不受同源策略的限制)
4容易被忽略的角落:Flash XSS
前面的XSS攻擊都是基于HTML的,其實在flash中同樣也會造成xss攻擊。
限制flash動態(tài)腳本的最重要的參數(shù):allowscriptaccess
控制flash與外部網(wǎng)絡(luò)進行通信:allowNetworking
5javascript開發(fā)框架真的高枕無憂嗎
目前最為流行的jQuery,框架只是對JavaScript語言本身的封裝,并不能解決代碼邏輯上產(chǎn)生的問題。在jQuery中有一個html()方法,這個方法如果沒有參數(shù),就是讀取一個DOM節(jié)點的innerHTML,如果有參數(shù),則會把參數(shù)值寫入該節(jié)點的DOM節(jié)點的innerHTML中,這個過程會產(chǎn)生dom based xss.
二xss的防御
1httponly
嚴(yán)格的說:httponly并非為了對抗XSS-httponly解決的是xss后的cookie劫持攻擊,httponly是在set-cookie時標(biāo)記的。
但是xss攻擊帶來的不光是cookie劫持問題,還有竊取用戶信息,模擬用戶身份執(zhí)行操作等諸多嚴(yán)重后果。
2輸入檢查
檢查邏輯必須放在服務(wù)器代碼中實現(xiàn),如果只在客戶端中,很容易被繞過。
現(xiàn)在普遍做法,是在客戶端JavaScript和服務(wù)器端同時檢測,客戶端的檢測可以阻斷大部分攻擊,從而節(jié)約服務(wù)器資源。
3輸出檢查
htmlencode ,javascriptencode,xmleccode......(安全編碼函數(shù))
xss攻擊主要發(fā)生在MVC架構(gòu)中的view層。
導(dǎo)致xss攻擊發(fā)生的原因,并不是使用auto-escape就萬事大吉了,xss的防御要區(qū)分情況對待。
4正確地防御XSS
xss產(chǎn)生的本質(zhì)原因:
xss的本質(zhì)還是一種HTML注入,用戶的數(shù)據(jù)被當(dāng)成了HTML代碼一部分執(zhí)行,從而混淆了原本的語義,產(chǎn)生了新的語義。
如果網(wǎng)站使用了MVC架構(gòu),那么xss就發(fā)生在view層,在應(yīng)用拼接變量到HTML頁面時產(chǎn)生。那么用戶提交數(shù)據(jù)進行輸入檢查的方案,其實并不是在真正發(fā)生攻擊的地方做防御。
在HTML標(biāo)簽中輸出,在HTML屬性中輸出,在<script>標(biāo)簽中輸出,在事件中輸出。在css中輸出等等各有自己的防御方法。
5處理富文本(允許用戶提交一些自定義的html代碼)
HTML是一種結(jié)構(gòu)性語言,比較好分析,通過htmlparser可以解析出HTML代碼的標(biāo)簽,標(biāo)簽屬性和事件
在過濾富文本時,不應(yīng)該包括事件這種動態(tài)效果,在標(biāo)簽選擇上,應(yīng)該使用白名單,避免使用黑名單。
過濾css時,需要一個cssparser 對樣式進行智能分析。
6防御dom based xss
一些函數(shù)導(dǎo)致需要分語境使用不同的編碼函數(shù)。