Content-Security-Policyの解析

Content-Security-Policy(CSP)をディレクティブごとに分けて日本語で説明します。unsafe-inline や object-src・base-uri・frame-ancestors の指定漏れ、default-src へのフォールバック、重複や非推奨の書き方も指摘します。

CSP を貼り付けると、ディレクティブごとに分けて説明します。

指摘

    ディレクティブの意味

    ディレクティブと値の説明
    ディレクティブ 意味と値

    種類ごとに実際に効く指定

    書いていない種類は default-src などへフォールバックします。base-uri / form-action / frame-ancestors はフォールバックしません。

    リソースの種類ごとに使われるディレクティブ
    種類 効いている指定 値

    補足

    • Content-Security-Policy: で始まる行、-Report-Only のヘッダー、 <meta http-equiv="Content-Security-Policy" content="…"> のどれを貼っても読みます。
    • 判定は CSP Level 3 の仕様と主要ブラウザの挙動に合わせています。 セキュリティ診断ではありません。よくある弱い書き方を指摘するだけで、指摘がなくても安全とは限りません。
    • 同じディレクティブを 2 回書くと、ブラウザは 2 つ目以降を無視します。整形結果には書かれたまま残します。
    • カンマでつないだ複数のポリシー(同名ヘッダーを結合したもの)は、それぞれが別々に適用されるため 1 つずつ貼り付けてください。
    • HTTP ヘッダー全体を読むなら HTTPヘッダーの整形・解説 も使えます。
    • 貼り付けた内容は、この端末の外へ出ません。

    よくある質問

    このツールで CSP が安全かどうか判定できますか?

    できません。行うのは、ディレクティブごとの意味の説明と、'unsafe-inline' や object-src・base-uri・frame-ancestors の指定漏れのような、よく知られた弱い書き方の指摘までです。指摘がなくても安全とは限らず、サイトの作りに合っているかは判断していません。

    ヘッダー名付きや meta タグのまま貼り付けられますか?

    貼り付けられます。「Content-Security-Policy:」で始まる行、Report-Only のヘッダー、<meta http-equiv="Content-Security-Policy" content="…"> のどれでも、ポリシーの部分だけを取り出して読みます。meta タグの場合は、そこでは無視される frame-ancestors・report-uri・sandbox も指摘します。

    script-src を書いていないとき、スクリプトには何が効きますか?

    default-src が使われます。画面の「種類ごとに実際に効く指定」に、種類ごとにどのディレクティブが効いているかを出します。ただし base-uri・form-action・frame-ancestors は default-src へフォールバックしないため、書かなければ制限なしになります。

    nonce と 'unsafe-inline' を一緒に書くのは危険ですか?

    対応ブラウザでは危険ではありません。CSP Level 2 以降のブラウザは、nonce かハッシュがあると 'unsafe-inline' を無視するため、古いブラウザ向けの互換用として併記する書き方として扱い、「参考」として表示します。nonce もハッシュもなければ「危険」として指摘します。

    同じディレクティブを 2 回書くとどうなりますか?

    ブラウザは最初の 1 つだけを使い、2 つ目以降は無視します。このツールでは 2 つ目以降に「重複・無視される」と表示し、指摘の判定にも最初の 1 つだけを使います。

    ↑↓ 移動 / Enter 開く / Esc 閉じる