使い方
- ポリシーに、ディレクティブを1行に1つずつ書きます。script-srcのように、名前は正しく書いてください。
- 配信方法を選びます。Content-Security-Policyはポリシーを強制し、Content-Security-Policy-Report-Onlyは、最初に試すためのヘッダーです。
- リソースごとに適用されるルールを読んで、どのディレクティブがスクリプト、スタイル、画像、フレームを制限するかを確かめます。
- ヘッダーの行をサーバーにコピーし、結果の下に一覧で出た注意をそれぞれ直します。
リソースに適用されるルール
ブラウザは、リソースの種類ごとに1つのディレクティブで確認します。そのディレクティブがない場合は、決まった順にさかのぼります。表に示される順番は、ブラウザがたどる順番です。この順番は、CSPレベル3の6.8.3節によります。
- スクリプト:script-src-elem、次にscript-src、そしてdefault-src。
- インラインのイベントハンドラー:script-src-attr、次にscript-src、そしてdefault-src。
- スタイルシート:style-src-elem、次にstyle-src、そしてdefault-src。インラインのstyle属性も、style-src-attrで同じ形をたどります。
- フレーム:frame-src、次にchild-src、そしてdefault-src。
- ワーカー:worker-src、次にchild-src、次にscript-src、そしてdefault-src。
- 画像、フォント、音声と動画、プラグイン、マニフェスト、fetchのリクエスト:それぞれ独自のディレクティブ、次にdefault-src。
ツールが読むこと
ディレクティブはセミコロンで区切られますが、このツールは改行も受け付けます。名前は最初の空白までが読まれ、大文字と小文字は区別しません。同じディレクティブが2回現れると、最初のものが有効になり、重複は読み飛ばされます(CSPレベル3、2.2.1節)。
- 'self'や'none'のようなキーワードは、一重引用符で囲みます。'none'は、そのリストの中で単独で使わなければなりません。
- nonceは'nonce-'に続けてbase64の値です。ハッシュは、sha256、sha384、sha512のどれかに、ダッシュとbase64の値を続けたものです(2.3.1節)。
- ディレクティブの値の中にカンマは使えません。カンマはヘッダーでポリシーを区切るためです。
ツールがしないこと
- ページを読み込んだり、ブラウザでポリシーを試したりはしません。表に示すのは、ブラウザが使うルールであり、ページが今も動くかどうかではありません。
- キーワード、nonce、ハッシュのつづりは確かめますが、ホストやスキームの送信元は詳しくは確かめません。
- リストにないディレクティブ(sandboxなど)は判断しません。それらはヘッダーの行に、変更されずに残ります。
例:サンプルのポリシー
サンプルのポリシーでは、script-src-elemがないため、スクリプトはscript-srcを使います。frame-srcもchild-srcもないフレームは、default-srcにさかのぼります。worker-srcもchild-srcもないワーカーは、script-srcを使います。style-srcには'unsafe-inline'があるため、ツールはそれを1件の注意として示します。
| リソース | 順番どおりに確認 | 使われるルール |
|---|---|---|
| スクリプト(script要素) | script-src-elem、script-src、default-src | script-src |
| フレーム(iframe要素) | frame-src、child-src、default-src | default-src |
| ワーカー | worker-src、child-src、script-src、default-src | script-src |
よくある質問
書いていないスクリプトのルールが表に出てくるのは、なぜですか?
独自のディレクティブがないリソースは、さかのぼる先のディレクティブを使います。スクリプトの場合は、script-src-elem、次にscript-src、そしてdefault-srcです。表はブラウザが使うルールを示すため、script-srcがなくてもルールが表示されることがあります。
'unsafe-inline'は、何を許可しますか?
そのディレクティブが対象とする範囲で、インラインのスクリプトやインラインのスタイルを許可します。同じ送信元のリストにnonceかハッシュがあると、ブラウザは'unsafe-inline'を無視します(CSPレベル3、6.7.3.2節)。必要なインラインのコードには、どちらかを使ってください。
report-uriとreport-toは、どちらを書くべきですか?
report-toを使ってください。MDNは、report-uriを置き換えるディレクティブだと説明しています。report-toが広く対応されていない間は、MDNは両方を送ることを勧めています。このツールは、report-uriがあると注意を出します。
ディレクティブの名前が不明と表示されるのは、なぜですか?
このツールが判断するのは、ブラウザが実装し、MDNが説明しているディレクティブだけです。知らない名前は、ヘッダーの行にそのまま残りますが、表には含まれず、判断もされません。
このツールは、ポリシーをどこかに送りますか?
いいえ。ヘッダーはお使いのブラウザの中で作られます。入力した内容が運営者に送られたり保存されたりすることはなく、どのサイトでもポリシーは試されません。
CSPレベル3は、確定した標準ですか?
まだです。このツールが従う文書は、2026年10月27日付けのW3Cワーキングドラフトで、勧告トラックにある草案です。本番のポリシーでルールに頼る前に、最新版を確認してください。
出典
- CSPレベル3(英語): W3Cワーキングドラフト、2026年10月27日付け(2.2、2.3.1、4.4.1、6.7.3.2、6.8.3節)
- MDN(英語): Content-Security-Policyヘッダー、そのディレクティブとさかのぼりの規則
数値と文章の最終確認日:2026年11月10日火曜日。