CSP

Content Security Policy の略で、Web ページで実行可能なリソースの出所を制限するセキュリティ機構

セキュリティWeb

CSP とは

CSP (Content Security Policy) は、Web ページで実行可能なリソース (スクリプト、スタイル、画像) の出所を制限するセキュリティ機構である。XSS 攻撃の被害を大幅に軽減する。詳細は「CSP Nonce」を参照。

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 の段階的導入

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 の設定

# 静的サイト (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;

全体像を把握するには関連書籍も有用。

関連用語