CSP (Content Security Policy) とは、 Web ページで読み込み可能なリソース (スクリプト、スタイルシート、画像、フォントなど) のソースを制限する HTTP レスポンスヘッダーです。 XSS 攻撃の被害を大幅に軽減できるセキュリティ機構として、 OWASP が推奨しています。
CSP の基本的な仕組みは、「このページでは、これらのソースからのリソースのみ読み込みを許可する」というホワイトリストをブラウザに伝えることです。たとえば、 Content-Security-Policy: script-src 'self' https://cdn.example.com と設定すると、自サイトと cdn.example.com からのスクリプトのみ実行が許可され、攻撃者が注入したインラインスクリプトはブロックされます。
CSP の導入で最も苦労するのが、既存のインラインスクリプトやインラインスタイルへの対応です。 CSP はデフォルトでインラインコードの実行を禁止するため、 onclick 属性や <script> タグ内のコードが動作しなくなります。対処法として、 nonce (ワンタイムトークン) を使う方法と、 hash (スクリプトのハッシュ値) を使う方法があります。 nonce 方式はサーバーがリクエストごとにランダムな値を生成し、スクリプトタグと CSP ヘッダーの両方に同じ値を設定します。
まずは Content-Security-Policy-Report-Only ヘッダーで「違反を報告するだけでブロックしない」モードで運用し、レポートを分析してから本番適用するのが安全な導入手順です。関連書籍は Amazon でも探せます。