X-XSS-Protection
非標準:此功能是非標準的,並且不在標準軌道上。請勿在面向 Web 的生產網站上使用它:它不會對每個使用者都起作用。實現之間也可能存在很大的不相容性,並且行為在未來可能會發生變化。
HTTP X-XSS-Protection 響應頭是 Internet Explorer、Chrome 和 Safari 的一項功能,當它們檢測到反射型跨站指令碼 ( XSS ) 攻擊時,會阻止頁面載入。當網站實施強大的 Content-Security-Policy 來停用內聯 JavaScript ('unsafe-inline') 時,在現代瀏覽器中,這些保護在很大程度上是不必要的。
警告:即使此功能可以保護尚未支援 CSP 的舊版 Web 瀏覽器的使用者,但在某些情況下,XSS 保護可能會在原本安全的網站中建立 XSS 漏洞。有關更多資訊,請參閱下面的部分。
注意
- Chrome 已 刪除其 XSS 稽核器
- Firefox 尚未刪除,並且 不會實施
X-XSS-Protection - Edge 已 停用其 XSS 過濾器
這意味著,如果您不需要支援舊版瀏覽器,建議您使用 Content-Security-Policy 且不允許多unsafe-inline 指令碼。
語法
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 過濾(通常是瀏覽器的預設設定)。如果檢測到跨站指令碼攻擊,瀏覽器將清理頁面(刪除不安全的部件)。
- 1; mode=block
-
啟用 XSS 過濾。瀏覽器不會清理頁面,而是如果檢測到攻擊則會阻止渲染頁面。
- 1; report=<reporting-URI> (僅限 Chromium)
-
啟用 XSS 過濾。如果檢測到跨站指令碼攻擊,瀏覽器將清理頁面並報告違規行為。這使用 CSP
report-uri指令的功能來發送報告。
由 XSS 過濾引起的漏洞
考慮以下網頁 HTML 程式碼片段
<script>
var productionMode = true;
</script>
<!-- [...] -->
<script>
if (!window.productionMode) {
// Some vulnerable debug code
}
</script>
如果瀏覽器不執行 XSS 過濾,則此程式碼是完全安全的。但是,如果瀏覽器執行 XSS 過濾並且搜尋查詢為 ?something=%3Cscript%3Evar%20productionMode%20%3D%20true%3B%3C%2Fscript%3E,則瀏覽器可能會執行頁面中的指令碼,忽略 <script>var productionMode = true;</script>(認為伺服器將其包含在響應中,因為它位於 URI 中),導致 window.productionMode 被評估為 undefined 並執行不安全的除錯程式碼。
將 X-XSS-Protection 標頭設定為 0 或 1; mode=block 可以防止上述漏洞。前者將使瀏覽器執行所有指令碼,而後者將完全阻止頁面被處理(儘管如果網站可以嵌入到 <iframe> 中,這種方法可能容易受到 側通道攻擊 的影響)。
示例
阻止檢測到反射型 XSS 攻擊時頁面載入。
X-XSS-Protection: 1; mode=block
PHP
header("X-XSS-Protection: 1; mode=block");
Apache (.htaccess)
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
Nginx
add_header "X-XSS-Protection" "1; mode=block";
規範
不屬於任何規範或草案的一部分。
瀏覽器相容性
BCD 表格僅在瀏覽器中載入