CSP
Content Security Policy の略で、Web ページで実行可能なリソースの出所を制限するセキュリティ機構
CSP とは
CSP (Content Security Policy) は、Web ページで実行可能なリソース (スクリプト、スタイル、画像) の出所を制限するセキュリティ機構である。XSS の被害を抑える手段の 1 つで、入力の検証や出力時のエスケープの代わりにはならない。
CSP の仕組み
サーバーが HTTP レスポンスヘッダーで許可するリソースの出所を宣言し、ブラウザーがそのポリシーに違反するリソースの読み込みや実行をブロックする。インラインスクリプトや外部の不正なスクリプトが注入されても、CSP で許可されていなければ実行されない。
サーバーがレスポンスヘッダーで CSP を送信:
Content-Security-Policy: script-src 'self' https://cdn.example.com
ブラウザが CSP に違反するリソースをブロック:
✅ <script src="/app.js"> → 同一オリジン → 許可
✅ <script src="https://cdn.example.com/lib.js"> → 許可リスト → 許可
❌ <script src="https://evil.com/malware.js"> → ブロック
❌ <script>alert(1)</script> → インラインスクリプト → ブロック
主要なディレクティブ
default-src は、種類ごとのディレクティブを書いていないリソースに使われる既定の値になる。表の script-src 以下を個別に書くと、その種類だけ既定と違う許可を与えられる。
| ディレクティブ | 制御対象 |
|---|---|
default-src | 全リソースのデフォルト |
script-src | JavaScript |
style-src | CSS |
img-src | 画像 |
connect-src | fetch, XHR, WebSocket, EventSource, sendBeacon など |
font-src | フォント |
frame-src | iframe |
CSP の段階的導入
Content-Security-Policy-Report-Only ヘッダーで送ったポリシーは違反をブロックせず報告だけに使われるため、本番の動作を止めずに許可の不足を確かめられる。下の例の report-uri は CSP Level 3 (2026 年 10 月時点で W3C の作業草案) で非推奨とされ、後継の report-to への移行は「CSP レポート」の項で説明している。
1. Report-Only モードで監視
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report
2. 違反レポートを分析
→ どのリソースがブロックされるか確認
3. ポリシーを調整
→ 必要なオリジンを許可リストに追加
4. 本番適用
Content-Security-Policy: default-src 'self'; ...
インラインスクリプトの許可
nonce か hash を指定すると、同じディレクティブの 'unsafe-inline' は無視される。nonce はポリシーを送るたびに作り直す推測できない値で、仕様は符号化前で 128 ビット以上を推奨している。
| 方法 | セキュリティ |
|---|---|
'unsafe-inline' | 注入されたものを含め、どのインラインスクリプトも実行を許す |
'nonce-xxx' | リクエストごとに発行したランダムな値と一致するものだけ通す |
'sha256-xxx' | スクリプト本文のハッシュが一致するものだけ通す |
よくある CSP の設定
どちらの例も default-src 'self' で既定を自オリジンに絞り、必要な種類だけを個別に広げている。SPA の例では、API の呼び出し先を connect-src に加えている。
# 静的サイト (S3 + CloudFront)
default-src 'self';
script-src 'self';
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self';
# SPA + API
default-src 'self';
script-src 'self';
connect-src 'self' https://api.example.com;
全体像を把握するには関連書籍も有用。
この記事は役に立ちましたか?
関連用語
XSS
Web サイトに悪意のあるスクリプトを注入し、ユーザーの情報を盗む攻撃
セキュリティヘッダー
HTTP レスポンスヘッダーでブラウザーのセキュリティ機能を制御し、XSS やクリックジャッキングを防ぐ仕組み
CORS
ブラウザーの同一オリジンポリシーを緩和し、異なるオリジン間のリソース共有を許可する仕組み
ShellScript
シェルのコマンドをまとめて自動実行するスクリプト。作業の自動化に使われる
CSP レポート
Content Security Policy 違反をブラウザーがサーバーに自動報告し、XSS やデータ漏洩を検知する仕組み
Service Worker
ブラウザーとネットワークの間でプロキシとして動作し、オフライン対応やキャッシュ制御を実現する Web API
関連する記事
セキュリティ本ガイド - Web 開発者が読むべき技術書の選び方
Web セキュリティの基礎から実践まで学べる技術書の選び方マトリクスと、読了後にやるべき 3 つのアクションを紹介します。
AWS 本の選び方 - 全体像 / 構築 / 設計 / 運用 / セキュリティの 5 視点
AWS を学ぶ技術書の選び方を「全体像 / 構築 / 設計 / 運用 / セキュリティ」の 5 視点で整理。公式ドキュメントと本の役割分担、資格対策書の位置づけまで、2026 年 8 月時点の定番書で AWS 独学のルートを解説します。
バグを生むのは知識不足ではなく想像力不足である
バグの多くは、コードを書いた時点で「こういうケースもありうる」と想像できなかったことが原因です。想像力を鍛える読書法と、エッジケースへの感度を高める方法を解説します。