XSS攻擊雜談

不存在一個(gè)提及XSS攻擊就都可以應(yīng)付的通法。需要根據(jù)需求思考可能存在的攻擊點(diǎn),做對(duì)應(yīng)的處理。

什么是XSS攻擊

XSS大名叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當(dāng)用戶瀏覽該頁之時(shí),嵌入其中Web里面的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意用戶的特殊目的。
下面就一個(gè)url傳參的然后在某個(gè)地方展現(xiàn)參數(shù)文本的場(chǎng)景討論

XSS攻擊分類

反射型:后端讀取參數(shù),參數(shù)夾雜在響應(yīng)中。
存儲(chǔ)型:后端讀取參數(shù)、存儲(chǔ),需要拉取數(shù)據(jù)時(shí)返回給前端。
DOM型:前端讀取參數(shù)(路由傳參),參數(shù)插入在DOM結(jié)構(gòu)中。

防御XSS
X-XSS-Protection

一個(gè)瀏覽器用來防御XSS攻擊的HTTP頭字段。

X-XSS-Protection: 0
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; report=<reporting-uri>

0禁止XSS過濾。
1啟用XSS過濾(通常瀏覽器是默認(rèn)的)。 如果檢測(cè)到跨站腳本攻擊,瀏覽器將清除頁面(刪除不安全的部分)。
1; mode=block用XSS過濾。 如果檢測(cè)到攻擊,瀏覽器將不會(huì)清除頁面,而是阻止頁面加載。
1; report=<reporting-uri>啟用XSS過濾。 如果檢測(cè)到跨站腳本攻擊,瀏覽器將清除頁面并使用CSP report-uri指令的功能發(fā)送違規(guī)報(bào)告。
缺點(diǎn):只攔截HTML屬性和節(jié)點(diǎn),瀏覽器支持性不好。

過濾

過濾是面對(duì)XSS的常規(guī)反應(yīng),但是要想好過濾什么。
怎么讓一個(gè)參數(shù)內(nèi)容是代碼的時(shí)候另一邊展示代碼?
字符:> --> &gt; < --> &lt; & ---> &amp;
屬性:on開頭的統(tǒng)統(tǒng)干掉,src href data 要對(duì)url做校驗(yàn)(支持http、https或者相對(duì)路徑,根據(jù)應(yīng)用場(chǎng)景而定),style(因?yàn)槔习姹緸g覽器支持css expression,用戶需要定制樣式可以提供一些定制樣式的class)
標(biāo)簽:script style link embed(嵌入資源,提防flash腳本) object(瀏覽器插件)
可不可以不要一刀切?
對(duì)于css expression可以做一個(gè)CSS過濾器不過會(huì)增加成本,而對(duì)于移動(dòng)端H5的項(xiàng)目可以不用管,因?yàn)閑xpreion已經(jīng)廢棄。
對(duì)于embed object如果不去除還要設(shè)置allowScript為none,等配置。
如何讓用戶輸入的html在另外的地方作為html解析?
很少有這樣的需求,富文本編輯器也是要點(diǎn)擊上方提示樣式按鈕給特定模板語法的。可以通過白名單過濾解決,但是白名單的方案本身很勉強(qiáng)(受限于任知范圍和HTML規(guī)范更新的支持)。

對(duì)于XSS攻擊的處理后端是一定要做的,在前端做會(huì)減輕后端的壓力。后端也是具備解析HTML能力的(通過自己寫的解析器或者開一個(gè)瀏覽器線程),不過對(duì)于后端的意義是不同的,作為一個(gè)XML節(jié)點(diǎn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容