作者: friday
http://forsomething.cn/
針對xss的防御郎仆,必須遵循的準則就是:
不要相信用戶輸入的任何東西,不要將用戶輸入的數(shù)據(jù)變?yōu)榇a執(zhí)行瞎嬉,從而混淆了原本的語意蝎毡。
要根治xss攻擊。需要了解xss所在的不同的場景氧枣。
xss過濾方式:
1沐兵、在html標簽中的輸出
<div>$var</div>
在標簽中直接輸出,導致xss問題便监。
防御的方法:對用戶輸入的變量使用htmlencode
2扎谎、在html屬性中的輸出
<div id="xxx" name="$var"></div>
防御方法依然是使用htmlencode進行處理,不過更為保險的做法是:除了字母和數(shù)字之外烧董,其他所有的特殊字符都編碼為htmlentities毁靶。
3、在<script>中的輸出
<script>
var x="$var";
<script>
這個就必須進行符號的閉合逊移,防御采用的是javascriptEncode预吆。
4、在事件中的輸出
和<script>中的輸出類似:
<a href=# onclick="funcA('$var')">test</a>
防御采用javascriptEncode防止符號的閉合
5胳泉、在css中的輸出
在css中的輸出在xss中的利用中非常多元化拐叉,可通過@import(),url()引入外部css樣式進行xss的攻擊扇商,可以利用expression進行xss的攻擊凤瘦。
防御的話禁止用戶可控制的遍歷出現(xiàn)在<style>、css文件中钳吟。
推薦使用owasp的encodeForCSS()函數(shù)進行加密廷粒,也就是除了字母和數(shù)字之外的特殊字符都編碼成十六進制的形式
6、在地址中的輸出
這種使用urlEncode即可,將特殊字符進行url編碼轉(zhuǎn)換坝茎。
其中比較特殊的就是偽協(xié)議的url涤姊,例如javascript,dataurl嗤放,這種的話對url進行判斷是否是http協(xié)議的url地址
7思喊、富文本的處理
富文本的xss防御比較多樣化,除了上述的一些次酌,還應注意使用白名單標簽恨课,避免使用黑名單標簽。
8岳服、dom型xss
這個是比較特殊的xss攻擊方式剂公。
防御的方法也比較特殊,在$var變量進入<script>時吊宋,應該先執(zhí)行一次javascriptencode纲辽,在dom輸出到html頁面時候也需要區(qū)別對待,如果是輸出到事件或者腳本中璃搜,則需要在做一次javascriptencode拖吼,如果是輸出到html或者屬性,則需要做一個htmlencode这吻。
減少xss危害的方法
1吊档、添加httponly屬性
2、系統(tǒng)后臺增加ip訪問限制唾糯,主要是針對獲取cookie偽造管理員登入方式怠硼。