X-XSS-Protection

非標準: この機能は標準ではなく、標準化の予定もありません。公開されているウェブサイトには使用しないでください。ユーザーによっては使用できないことがあります。実装ごとに大きな差があることもあり、将来は振る舞いが変わるかもしれません。

HTTP の X-XSS-Protection レスポンスヘッダーは Internet Explorer, Chrome, Safari の機能で、反射型クロスサイトスクリプティング (XSS) 攻撃を検出したときに、ページの読み込みを停止するためのものです。サイトが強力な Content-Security-Policy を実装しており、インライン JavaScript ('unsafe-inline') の使用を無効にしている場合、これらの保護は現代のブラウザーではほとんど不要となります。

警告: この機能は、まだ CSP に対応していない古いブラウザーのユーザーを保護できるにもかかわらず、場合によっては、他の安全なウェブサイトでXSS 保護機能が 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 only)

XSS フィルタリングを有効化します。クロスサイトスクリプティング攻撃を検知すると、ブラウザーはページをサニタイズし、攻撃レポートを作成します。レポートを送信するために、 CSP report-uri ディレクティブ機能を利用します。

XSS フィルタリングに起因する脆弱性

あるウェブページの抜粋である以下の HTML コードを考えてみましょう。

html
<script>
  var productionMode = true;
</script>
<!-- [...] -->
<script>
  if (!window.productionMode) {
    // 脆弱性のあるデバッグコード
  }
</script>

このコードは、ブラウザーが XSS フィルタリングを行わない場合は、完全に安全です。しかし、もしブラウザーがフィルタリングを行い、検索クエリーが ?something=%3Cscript%3Evar%20productionMode%20%3D%20true%3B%3C%2Fscript%3E である場合、ブラウザーはページ内のスクリプトを <script>var productionMode = true;</script> の部分を(URI にあったためサーバーがそれをレスポンスに記載したと思い)無視して残りを実行するかもしれません、 window.productionModeundefined と評価されて安全ではないデバッグコードを実行させる原因となることが考えられます。

X-XSS-Protection ヘッダーを 0 または 1; mode=block のいずれかに設定すると、上記のような脆弱性を防ぐことができます。前者はブラウザーがすべてのスクリプトを実行するようにし、後者はページがまったく処理されないようにします(ただし、この手法はウェブサイトが <iframe> に埋め込まれている場合は、サイドチャネル攻撃に対して脆弱になる可能性があります)。

XSS 攻撃が反映されたページを見つけたらその読み込みをブロックする場合。

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

PHP

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";

仕様書

仕様書や草案で定義されたものではありません。

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
X-XSS-Protection
DeprecatedNon-standard

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Non-standard. Check cross-browser support before using.
Deprecated. Not for use in new websites.
See implementation notes.

関連情報