X-XSS-Protection 頭

非標準:此特性未標準化。我們不建議在生產環境中使用非標準特性,因為它們瀏覽器支援有限,並且可能會更改或被移除。但是,在沒有標準選項的特定情況下,它們可以是合適的替代方案。

已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。

警告: 即使此功能可以保護不支援 CSP 的舊版網路瀏覽器使用者,但在某些情況下,X-XSS-Protection 可能會在原本安全的網站中建立 XSS 漏洞。請參閱下面的安全注意事項部分以獲取更多資訊。

HTTP X-XSS-Protection 響應頭是 Internet Explorer、Chrome 和 Safari 的一個功能,它會在檢測到反射型跨站指令碼 (XSS) 攻擊時阻止頁面載入。當網站實現強大的 Content-Security-Policy 以停用內聯 JavaScript ('unsafe-inline') 時,現代瀏覽器中這些保護措施在很大程度上是不必要的。

建議您使用 Content-Security-Policy 而不是 XSS 過濾。

頭型別 響應頭
禁止請求頭

語法

http
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 程式碼片段

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 頭設定為 01; mode=block 可以防止上述漏洞。前者將使瀏覽器執行所有指令碼,後者將完全阻止頁面處理(儘管這種方法如果網站可以嵌入到 <iframe> 中,可能會容易受到 側通道攻擊)。

示例

檢測到反射型 XSS 攻擊時阻止頁面載入

http
X-XSS-Protection: 1; mode=block

PHP

php
header("X-XSS-Protection: 1; mode=block");

Apache (.htaccess)

apacheconf
<IfModule mod_headers.c>
  Header set X-XSS-Protection "1; mode=block"
</IfModule>

Nginx

nginx
add_header "X-XSS-Protection" "1; mode=block";

規範

不屬於任何規範或草案。

瀏覽器相容性

另見