Content Security Policy(CSP)ジェネレーター

Content-Security-Policyをディレクティブごとに作成し、ヘッダー、metaタグ、Nginx、Apacheの設定として出力します。安全でない設定には警告が表示されます。

HTTP レスポンスヘッダー
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
ポリシーの評価
組み込みチェックでは問題は見つかりませんでした。
HTML の <meta> タグ
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests">
frame-ancestors、report-uri、report-to、sandbox は <meta> タグでは無効なので除外しました。使うには HTTP ヘッダーで送信してください。
Nginx
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests" always;
Apache (.htaccess)
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
既存のポリシーを取り込む
新しいポリシーを強制する前に、レポート専用モード(Content-Security-Policy-Report-Only)で始めてブラウザーのコンソールを確認しましょう。ここでのチェックは一般的な CSP 評価ルールに基づく静的なもので、実際のページのスクリプトは見えません。

CSPジェネレーターとは?

このCSPジェネレーターは、スクリプト、スタイル、画像、フレームなどのリソースの読み込み元を制限するContent-Security-Policyの作成を支援します。厳格なポリシーから始めて、各ディレクティブを編集でき、結果をその場で評価して、'unsafe-inline'、ワイルドカードのスクリプトソース、object-srcやbase-uriの欠落、引用符のないキーワードなどの弱点を警告します。既存のポリシーを取り込むこともできます。

CSPジェネレーターの使い方

  1. Strictのスターターポリシーから始めるか、Clear allを押します。
  2. 各ディレクティブのソースを、'self' https://cdn.example.com のように編集します。
  3. upgrade-insecure-requestsを切り替え、必要ならreport-uriを追加します。
  4. ポリシーの評価を読み、重大と中程度の指摘を修正します。
  5. ポリシーをHTTPヘッダー、metaタグ、Nginx、Apacheの行としてコピーします。既存のポリシーを取り込んで分析することもできます。

例

入力
Strict starter policy
出力
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests

CSPジェネレーターを使うべき場面

CSPをデプロイする前の下書きやレビューに使います。厳格なポリシーは、許可し忘れたインラインスクリプトやサードパーティのウィジェットを壊すため、新しいポリシーはまずContent-Security-Policy-Report-Onlyで展開して、違反を監視してください。チェックは静的であり、ページが実際にどのスクリプトを読み込むかは分かりません。

CSPジェネレーターの仕組み

ディレクティブは、空のものを除き、name source source; … の形で決まった順序でシリアライズされます。評価は、GoogleのCSP Evaluatorに似た静的なルールを適用します。selfやnoneなどのキーワードは引用符で囲む必要があり、nonceやhashなしで 'unsafe-inline'、'unsafe-eval'、*、http:、https:、data: を含むscript-src(またはフォールバックのdefault-src)は指摘され、object-srcは 'none' にすべきで、base-uri、frame-ancestors、form-actionは設定すべきです。metaタグ版では、ブラウザがmetaタグでは無視するframe-ancestors、report-uri、report-to、sandboxが省かれます。

一般的な使用例

  • 新しいサイトのための最初の厳格なCSPを作る。
  • 本番からコピーしたポリシーを、'unsafe-inline'やワイルドカードの観点で監査する。
  • アクセス解析やCDNのホストをscript-srcに正しく追加する。
  • ポリシーに対応する、正確なNginxのadd_header行を取得する。

よくある質問

'unsafe-inline'が問題なのはなぜですか。

XSSの脆弱性から注入されたものを含め、あらゆるインラインスクリプトを許可してしまい、CSPの主な目的が損なわれます。代わりにnonceやhashを使ってください。

ヘッダーとmetaタグのどちらがよいですか。

HTTPヘッダーを推奨します。metaタグではframe-ancestors、report-uri、sandboxを使えず、それより後ろのコンテンツにしか適用されません。

サイトを壊さずにテストするにはどうすればよいですか。

同じポリシーをContent-Security-Policy-Report-Onlyとして送ります。ブラウザは何もブロックせず、違反をコンソールに報告します。

他のカテゴリを見る