大家都說XSS是一門又熱門又不太受重視的Web攻擊手法撤师,因?yàn)槠浜臅r(shí)間绵脯、有一定幾率不成功海洼、沒有相應(yīng)的軟件來完成自動(dòng)化攻擊跨新、是一種被動(dòng)的攻擊手法等。但是由于XSS攻擊成本不高且不易被檢測(cè)到坏逢,而且服務(wù)端安全問題越來越被重視域帐,XSS攻擊在客戶端方面還是比較受歡迎的。
XSS攻擊:跨腳本攻擊是整。是最常見的一種web安全漏洞肖揣,其原理是攻擊者向有XSS漏洞的網(wǎng)站中輸入(傳入)惡意的HTML代碼,當(dāng)其它用戶瀏覽該網(wǎng)站時(shí)浮入,這段HTML代碼會(huì)自動(dòng)執(zhí)行龙优,從而達(dá)到攻擊的目的。
XSS主要分為三類:反射型XSS事秀、存儲(chǔ)型XSS和DOM-XSS彤断。
反射型XSS:主要做法是將腳本代碼加入U(xiǎn)RL地址的請(qǐng)求參數(shù)里,請(qǐng)求參數(shù)進(jìn)入程序后在頁(yè)面直接輸出易迹,用戶點(diǎn)擊類似的惡意鏈接就可能受到攻擊宰衙。
存儲(chǔ)型XSS:主要是應(yīng)用程序從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù),在頁(yè)面中顯示出來睹欲,攻擊者在相關(guān)頁(yè)面輸入惡意的腳本數(shù)據(jù)后供炼,用戶瀏覽此類頁(yè)面時(shí)就可能受到攻擊。
DOM-XSS:它和其他兩種的區(qū)別是窘疮,DOM-XSS的XSS代碼不需要服務(wù)器解析響應(yīng)的直接參與袋哼,觸發(fā)XSS靠的就是瀏覽器端的DOM解析,可以認(rèn)為完全是客戶端的事情闸衫。
在我們node項(xiàng)目中涛贯,選擇用xss來做基礎(chǔ)的過濾,使用方式如下:
? ? ? 安裝: npm install xss
? ? ? 使用方式: var xss = require('xss'); var html = xss('<script>alert(1)</script>'); ?console.log(html);
但是實(shí)際過程中楚堤,還是存在很多情況是過濾不到的疫蔓,比如在這種情況下:
? ? 當(dāng)參數(shù)經(jīng)過編碼后:2%27%2Balert%2817064%29%2B%27 ('2'+alert(17064)+'') 就可以躲過xss的過濾。
? ? 那么遇到這種情況應(yīng)該怎么處理呢身冬?
由于我遇到的情況是出現(xiàn)在純數(shù)字參數(shù)上,所以我的處理方式是:先encode 然后過濾非純數(shù)字的值岔乔。
? ? ? ? encodeURLComponent(xss('需要過濾的參數(shù)'))酥筝;
? ? ? ? /^[0-9]*$/.test('參數(shù)') ? ?'參數(shù)' :'默認(rèn)值'
因?yàn)槲抑皩?duì)這方面也沒有特別關(guān)注,可能想到的這個(gè)不是很好的處理方式雏门,如果大家有更好的方式嘿歌,希望不吝賜教掸掏!