CSP レポート

Content Security Policy 違反をブラウザがサーバーに自動報告し、XSS やデータ漏洩を検知する仕組み

セキュリティ

CSP レポートとは

CSP レポートは、Content Security Policy (CSP) に違反するリソースの読み込みやスクリプトの実行をブラウザが検知し、指定したエンドポイントに自動報告する仕組みである。XSS 攻撃の試行、意図しない外部リソースの読み込み、サードパーティスクリプトの不正な動作を検知できる。

基本的な設定

最小の設定は、CSP ヘッダーに報告先を 1 つ足すだけである。

Content-Security-Policy: default-src 'self'; script-src 'self'; report-uri /csp-report

ブラウザが CSP 違反を検知すると、Content-Type: application/csp-report で以下の JSON/csp-report に POST する。

{
  "csp-report": {
    "document-uri": "https://example.com/page",
    "violated-directive": "script-src 'self'",
    "blocked-uri": "https://evil.com/malicious.js",
    "original-policy": "default-src 'self'; script-src 'self'",
    "disposition": "enforce"
  }
}

Report-Only モード

CSP を本番に導入する際、いきなり enforce (ブロック) すると、正当なリソースまでブロックしてサイトが壊れるリスクがある。Content-Security-Policy-Report-Only ヘッダーを使えば、違反を報告するだけでブロックしない。

Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self'; report-uri /csp-report
  1. Report-Only で CSP を設定し、違反レポートを収集
  2. レポートを分析し、正当なリソースを CSP に追加
  3. 違反が十分に減ったら、enforce モードに切り替え

report-to への移行

report-uri は仕様上すでに非推奨で、後継は report-to ディレクティブと Reporting-Endpoints レスポンスヘッダーの組み合わせである。Chrome のドキュメントでは Reporting-Endpoints を使う世代を Reporting API v1、旧 Report-To ヘッダーの世代を v0 と呼び分けている (2026 年 8 月時点)。

Content-Security-Policy: default-src 'self'; report-to csp-endpoint
Reporting-Endpoints: csp-endpoint="https://example.com/csp-report"

移行時の落とし穴が 2 つある。1 つは、report-to を解釈するブラウザは同じポリシー内の report-uri を無視するという挙動である。対応が揃うまでは両方を並べて書いておけば、対応ブラウザは report-to を、未対応ブラウザは report-uri を使うため取りこぼしが出ない。もう 1 つは届くレポートの形が変わる点で、report-to 経由では Content-Type: application/reports+jsontype"csp-violation" のレポートが送られ、違反の中身は body の下にキャメルケースのキー (blockedURL / documentURL / effectiveDirective など) で入る。{"csp-report": {...}} を前提に書いた受信処理はそのままでは解釈できないため、両形式を判別して扱う。

レポートの分析ポイント

レポートを受け取ったら、次のフィールドから読む。

フィールド確認すべきこと
blocked-uri不正な外部ドメインか、正当なリソースか
violated-directiveどの CSP ディレクティブに違反したか (effective-directive の旧名で、値は同じ)
document-uriどのページで発生したか
dispositionenforce (ブロック済み) か report (報告のみ) か

大量のレポートが発生する場合、blocked-uri でグルーピングし、頻度の高い違反から対処する。

CSP レポートの背景や設計思想は関連書籍に詳しい。

この記事は役に立ちましたか?

関連用語

関連する記事