CSP
Content Security Policy の略で、Web ページで実行可能なリソースの出所を制限するセキュリティ機構
セキュリティWeb
「CSP」の技術書を見る (4 冊) →CSP とは
CSP (Content Security Policy) は、Web ページで実行可能なリソース (スクリプト、スタイル、画像) の出所を制限するセキュリティ機構である。XSS 攻撃の被害を大幅に軽減する。詳細は「CSP Nonce」を参照。
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 | JavaScript |
style-src | CSS |
img-src | 画像 |
connect-src | fetch, XHR, WebSocket |
font-src | フォント |
frame-src | iframe |
CSP の段階的導入
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'; ...
インラインスクリプトの許可
インラインスクリプトの許可を以下にまとめる。
| 方法 | セキュリティ |
|---|---|
'unsafe-inline' | ❌ XSS を防げない |
'nonce-xxx' | ✅ リクエストごとにランダム |
'sha256-xxx' | ✅ スクリプトのハッシュ |
よくある CSP の設定
よくある CSP の設定を図で示す。
# 静的サイト (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
ブラウザの同一オリジンポリシーを緩和し、異なるオリジン間のリソース共有を許可する仕組み
ファイルディスクリプタ
OS がオープンしたファイルやソケットを識別するための整数値
CSP レポート
Content Security Policy 違反をブラウザがサーバーに自動報告し、XSS やデータ漏洩を検知する仕組み
ShellScript
シェルのコマンドをまとめて自動実行するスクリプト。作業の自動化に使われる