安全隱患,你對X-XSS-Protection頭部欄位理解可能有誤
*本文原創作者:bgusko63190,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
0×00. 引言
我曾做過一個調查,看看網友們對關於X-XSS-Protection 欄位的設置中,哪一個設置是最差的,調查結果令我非常吃驚,故有此文。
網友們認為 最差的配置是X-XSS-Protection: 0,其次是 X-XSS-Protection: 1; mode=block, 反而X-XSS-Protection: 1 成了不是最差的配置了。在我看來(其他人也可能和我持有同樣觀點),X-XSS-Protection: 1 應該是最差的配置。
在這篇文章中,我會和大家一起討論有關X-XSS-Protection的配置,最後希望大家明白什麼樣的X-XSS-Protection配置才是有安全隱患的。
0×01. 科普下相關知識
從IE8 開始,IE 瀏覽器內置了一個針對XSS攻擊的防護機制,這個瀏覽器內置的防護機制就是所謂的XSS filter,這個防護機制主要用於減輕反射型XSS 攻擊帶來的危害。 基於Webkit 內核的瀏覽器(比如Chrome)隨後也增加一個名為XSS auditor 的防護機制,作用和IE中的XSS filter類似。這兩種XSS防護機制的目的都很簡單,如果瀏覽器檢測到了含有惡意代碼的輸入被呈現在HTML文檔中,那麼這段呈現的惡意代碼要麼被刪除,要麼被轉義,惡意代碼不會被正常的渲染出來,當然了,瀏覽器是否要攔截這段惡意代碼取決於瀏覽器的XSS防護設置。
至於怎麼設置瀏覽器的XSS防護機制,其實很簡單,只要在HTTP響應報文的頭部增加一個X-XSS-Protection 欄位,明確地告訴瀏覽器XSS filter/auditor該如何工作。 X-XSS-Protection 的欄位有三個可選配置值
0: 表示關閉瀏覽器的XSS防護機制
1:刪除檢測到的惡意代碼, 如果響應報文中沒有看到X-XSS-Protection 欄位,那麼瀏覽器就認為X-XSS-Protection配置為1,這是瀏覽器的默認設置
1; mode=block:如果檢測到惡意代碼,在不渲染惡意代碼
0×02. X-XSS-Protection的默認配置並不安全
讓我們一起討論一下瀏覽器中關於X-XSS-Protection欄位的默認設置。 其實默認設置有安全隱患的。
第一個安全隱患就是:
默認設置擴大了攻擊面, 比如攻擊者可以利用這個默認設置選擇性的刪除頁面中某些腳本,下圖就是一個例子
在上圖的例子中, jQuery 庫竟然被意外的刪除了,之所以會出現這樣的現象,是因為 瀏覽器的XSS auditor分不清jQuery庫是頁面本身自帶的還是攻擊者注入的。 如果這次被以外刪除的是一個和安全先關的js庫,你可以想像,攻擊者注入一個和含有js安全庫名字的惡意代碼,這樣就可以把這個js安全庫給刪除了。 類似這樣的攻擊手法已經出現了,點擊這裡查看詳情
第二個安全隱患是:
默認設置會引入新的漏洞,早在2009年,IE瀏覽器就因為XSS filter的缺陷被爆出一個UXSS漏洞。實際上,攻擊者可以將無害的標籤變成有害的標籤,因為過濾器有時候很傻,會不正確地替換了關鍵位置的字元,從而損害了原始文檔的結構。
通過精心製作的有效載荷,可以繞過屬性下文的限制。 最近,我發現很多類似UXSS的漏洞被發現,這些漏洞本質上的原因都是一樣的。
第三個安全隱患:
必然會有繞過XSS filter/auditor 的方法出現, 不信你可以看看以前被繞過的例子,比如這個,這個,這個,還有這個。 從這些被繞過的案例中,我們可以發現,不管XSS filter/auditor 的過濾多麼嚴格, 它總存在被繞過的可能, 此外,XSS filter/auditor 在某些場景下是有短板的,Chromium 小組曾經很明確的表明:XSS auditor 只是眾深防禦的一環,完全靠它是無法防止所有的XSS攻擊。
好了。至此,大家對XSS filter/auditor 是可以被繞過的這一觀點沒有異議吧。 XSS filter/auditor的默認設置會部分刪除它認為的惡意代碼,這種做法有時候是有問題的,所以XSS-Protection: 1; mode=block這個設置是最好的了嘍?
咋一看,好像是沒了上述提到的問題,而且還能提供一定的防禦能力,可不幸的是,這樣的配置還是會引入新的漏洞, 最明顯的一個例子就是Refer 泄露的BUG,這個漏洞導致了Facebook賬戶劫持漏洞. 這也是Facebook 為什麼選擇禁用XSS filter/auditor的原因。引入的漏洞不僅僅這一個,其他的漏洞比如這個,還有這個。 當然了,和上述提到的漏洞相比,這種配置引入的漏洞還是相對少一點。
0×03. 那麼問題來了,最好的設置是什麼
總而言之, 至於設置成XSS-Protection: 0還是XSS-Protection: 1; mode=block取決於你的業務場景,如果在你的業務場景中,你認為你的程序或系統是不會有XSS漏洞的, 或者是無法承擔XSS filter/auditor 特性引發的BUG,那你就選擇配置成前者;否則,你還是選擇配置成後者吧。 反正,老司機給你一句忠告就是,千萬別配置成XSS-Protection: 1


※「Scaling Lean」作者Ash Maurya訪談
※組織為什麼沒能採用CI和CD
※APP UI界面中的版式設計理論
※【Diving into WWDC 2017】Labs 答疑紀實
※遊戲程序員成長編年史
TAG:推酷 |
※Android如何實現帶有粘性頭部的ScrollView
※Nx頭部追蹤器助你「超神」,1MORE Spearhead VRX開箱測
※3.19 VR掃描:Oculus Go或將於F8大會正式發布;Magic Leap專利,根據頭部位置檢測聲音
※Miriam Stoppard博士:撞擊頭部會導致痴呆症
※Nx頭部追蹤器助你「超神」,1MORE Spearhead VRX開箱測評
※資訊:壽屋 MSG系列 MechaSupply 12 自定義頭部A
※印度物流哪家強?通過財務數據拆解頭部玩家BlackBuck和Rivigo
※VR遊戲Arcas Path發布,只需頭部控制,玩法簡單有趣
※網格交易的頭部玩家,BitUniverse到底怎麼樣?
※HungerGame:幣圈交易所的頭部之爭
※vivoNEX和OPPO FindX維修價格出爐,攝像頭部分不是最貴的!
※頭部掛件廠再出大作 Sacai聯名BeatsX耳機你愛上了嗎?
※VR遊戲《Arca』s Path》發布,只需頭部控制,玩法簡單有趣
※ionic 頭部與底部
※非封閉性真無線耳機,支持頭部手勢,Xperia Ear Duo上手體驗
※ionic 頭部和底部
※Nike Air Max 1加入今年「N7」系列的先頭部隊
※不是google,更不是Tesla,這家汽車零部件廠竟佔據無人駕駛專利的頭部
※PUBG Mobile奪得Q3全球iOS下載冠軍:小遊戲頭部佔比65%
※Magic Leap申請「空間音頻」專利,用頭部位置檢測聲音