REST APIサーバーにおけるCSPヘッダーの設定と運用
セキュリティ
REST API
REST APIサーバーでは、最も制限的なCSP設定が推奨される。
基本設定:
各ディレクティブの意味:
default-src 'none'
: すべてのリソース読み込みをブロック(スクリプト、スタイル、画像など)frame-ancestors 'none'
: iframe埋め込みを完全に禁止(クリックジャッキング対策)
この設定が適切な理由:
- APIサーバーはJSONのみを返すため、HTMLリソースの読み込みは不要
- ブラウザが誤ってHTMLとして解釈してもXSS攻撃を完全に防御
- データインジェクション攻撃を防止
拡張が必要なケース:
- 画像配信:
img-src 'self'
を追加 - WebSocket使用:
connect-src 'self' wss:
を追加 - 外部API連携:
connect-src
に対象URLを追加
運用上の注意点:
- CORS設定と混同しない(APIアクセス制御はCORSで行う)
- CSPはブラウザがレスポンスをHTMLとして解釈した場合のみ有効
- パフォーマンスへの影響はほぼなし(ヘッダー追加のみ)
CSP違反の監視が必要な場合はreport-uri
ディレクティブでレポート先を指定可能。