xss防御

  1. 四兩撥千斤:HttpOnIy
    嚴(yán)格地說面殖,HttpOnly并非為了對(duì)抗XSS——HttpOnly解決的是XSS后的Cookie劫持攻擊。
    Cookie設(shè)置了HttpOnly哭廉,則使用XSS竊取用戶的Cookie會(huì)失敗脊僚,因?yàn)镴avaScript讀取不到Cookie的值。
    但是遵绰,HttpOnly不是萬能的辽幌,添加了HttpOnly不等于解決了XSS問題。XSS攻擊帶來的不光是Cookie劫持問題椿访,還有竊取用戶信息乌企、模擬用戶身份執(zhí)行操作等諸多嚴(yán)重的后果。如前文所述成玫,攻擊者利用AJAX構(gòu)造HTTP請(qǐng)求加酵,以用戶身份完成的操作,就是在不知道用戶Cookie的情況下進(jìn)行的哭当。使用HttpOnly有助于緩解XSS攻擊猪腕,但仍然需要其他能夠解決XSS漏洞的方案。
  2. 輸入檢查
    使用XSS Filter類钦勘,過濾掉非法字符陋葡,但要注意不要誤傷友軍。
  3. 輸出檢查
    一般來說彻采,除了富文本的輸出外腐缤,在變量輸出到HTML頁面時(shí),可以使用編碼或轉(zhuǎn)義的方式來防御XSS攻擊
    3.1 安全的編碼函數(shù)
    編碼分為很多種肛响,針對(duì)HTML代碼的編碼方式是HtmlEncode岭粤。
    HtmlEncode并非專用名詞,它只是一種函數(shù)實(shí)現(xiàn)终惑。它的作用是將字符轉(zhuǎn)換成HTMLEntities,對(duì)應(yīng)的標(biāo)準(zhǔn)是ISO-8859-1门扇。
    為了對(duì)抗XSS雹有,在HtmlEncode中要求至少轉(zhuǎn)換以下字符:
    & --> &
    < --> <

    --> >
    " --> "
    / --> / 包含反斜線是因?yàn)樗赡軙?huì)閉合一些HTML entity
    在PHP中偿渡,有htmlentities() 和htmlspecialchars() 兩個(gè)函數(shù)可以滿足安全要求。
    相應(yīng)地霸奕,JavaScript的編碼方式可以使用JavascriptEncode溜宽。

  4. 正確地防御XSS
    為了更好地設(shè)計(jì)XSS防御方案,需要認(rèn)清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頁面時(shí)產(chǎn)生魄揉。所以在用戶提交數(shù)據(jù)處進(jìn)行輸入檢查的方案,其實(shí)并不是在真正發(fā)生攻擊的地方做防御洛退。
    想要根治XSS問題瓣俯,可以列出所有XSS可能發(fā)生的場(chǎng)景,再一一解決兵怯。
  5. 處理富文本
    如何區(qū)分安全的“富文本”和有攻擊性的XSS呢?
    在處理富文本時(shí)媒区,還是要回到“輸入檢查”的思路上來驼仪∽そ觯“輸入檢查”的主要問題是谅畅,在檢查時(shí)還不知道變量的輸出語境噪服。但用戶提交的“富文本”數(shù)據(jù),其語義是完整的HTML代碼粘优,在輸出時(shí)也不會(huì)拼湊到某個(gè)標(biāo)簽的屬性中仇味。因此可以特殊情況特殊處理。
    在上一節(jié)中雹顺,列出了所有在HTML中可能執(zhí)行腳本的地方丹墨。而一個(gè)優(yōu)秀的“XSS Filter”,也應(yīng)該能夠找出HTML代碼中所有可能執(zhí)行腳本的地方嬉愧。
    HTML是一種結(jié)構(gòu)化的語言贩挣,比較好分析。通過htmlparser可以解析出HTML代碼的標(biāo)簽、標(biāo)簽屬性和事件王财。在過濾富文本時(shí)卵迂,“事件”應(yīng)該被嚴(yán)格禁止,因?yàn)椤案晃谋尽钡恼故拘枨罄锊粦?yīng)該包括“事件”這種動(dòng)態(tài)效果绒净。而一些危險(xiǎn)的標(biāo)簽见咒,比如<iframe>、<script>挂疆、<base>改览、<form>等,也是應(yīng)該嚴(yán)格禁止的缤言。
    在標(biāo)簽的選擇上宝当,應(yīng)該使用白名單,避免使用黑名單墨闲。比如今妄,只允許 <a>、<img>鸳碧、<div>等比較“安全”的標(biāo)簽存在盾鳞。
    “白名單原則”不僅僅用于標(biāo)簽的選擇,同樣應(yīng)該用于屬性與事件的選擇瞻离。
    在富文本過濾中腾仅,處理CSS也是一件麻煩的事情。如果允許用戶自定義CSS套利、style推励,則也可能導(dǎo)致XSS攻擊。因此盡可能地禁止用戶自定義CSS與style肉迫。
  6. 防御DOM Based XSS
    DOM Based XSS是一種比較特別的XSS漏洞验辞,前文提到的幾種防御方法都不太適用,需要特別對(duì)待喊衫。
    事實(shí)上跌造,DOM Based XSS是從JavaScript中輸出數(shù)據(jù)到HTML頁面里。而前文提到的方法都是針對(duì)“從服務(wù)器應(yīng)用直接輸出到HTML頁面”的XSS漏洞族购,因此并不適用于DOM Based XSS壳贪。
    從JavaScript輸出到HTML頁面,也相當(dāng)于一次XSS輸出的過程寝杖,需要分語境使用不同的編碼函數(shù)违施。

文章為總結(jié)整理文,原文來自:《白帽子講Web安全》
https://weread.qq.com/web/reader/7c4327b05cfd497c4eaa52f

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瑟幕,一起剝皮案震驚了整個(gè)濱河市磕蒲,隨后出現(xiàn)的幾起案子留潦,更是在濱河造成了極大的恐慌,老刑警劉巖辣往,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愤兵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡排吴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門懦鼠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钻哩,“玉大人,你說我怎么就攤上這事肛冶。” “怎么了睦袖?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)馅笙。 經(jīng)常有香客問我伦乔,道長(zhǎng)董习,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任皿淋,我火速辦了婚禮,結(jié)果婚禮上窝趣,老公的妹妹穿的比我還像新娘疯暑。我一直安慰自己哑舒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布散址。 她就那樣靜靜地躺著,像睡著了一般预麸。 火紅的嫁衣襯著肌膚如雪瞪浸。 梳的紋絲不亂的頭發(fā)上吏祸,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天钩蚊,我揣著相機(jī)與錄音,去河邊找鬼蹈矮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泛鸟,可吹牛的內(nèi)容都是我干的蝠咆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼北滥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼刚操!你這毒婦竟也來了再芋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤济赎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后司训,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壳猜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年叭喜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蓖谢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捂蕴。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啥辨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盯腌,到底是詐尸還是另有隱情溉知,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布腕够,位于F島的核電站级乍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏帚湘。R本人自食惡果不足惜玫荣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望大诸。 院中可真熱鬧捅厂,春花似錦贯卦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辙芍。三九已至,卻和暖如春故硅,著一層夾襖步出監(jiān)牢的瞬間外遇,已是汗流浹背契吉。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工捐晶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妄辩。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像眼耀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哮伟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345