Content Security Policy (CSP) とは、Web ページが読み込み可能なリソース (スクリプト、スタイルシート、画像、フォント、iframe など) の出所をホワイトリスト方式で制限する HTTP レスポンスヘッダーです。XSS (クロスサイトスクリプティング) 攻撃の被害を大幅に軽減する、多層防御の重要な一層です。
基本的な構文として、Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com のように、リソースタイプごとに許可するオリジンを指定します。'self' は同一オリジンのみを許可し、外部ドメインは明示的にリストする必要があります。
短縮 URL サービスにおける CSP の重要性は 2 つあります。第一に、短縮 URL のプレビューページやダッシュボードに CSP を適用することで、万が一 XSS 脆弱性が存在しても攻撃者のスクリプト実行を阻止できます。第二に、CSP が遷移について制限できる範囲はフォームの送信先 (form-action) と自ページを埋め込む親ページ (frame-ancestors) に限られ、リダイレクト先の URL そのものは対象外です。プレビューページでリダイレクト先を iframe に埋め込む設計では、相手サイトが frame-ancestors を指定していれば表示が阻止される点も踏まえる必要があります。
実装上の注意点として、(1) 違反レポートの収集は report-to ディレクティブで行い、これに未対応のブラウザ向けには非推奨の report-uri も併記して、正当なリソースのブロックを検知する、(2) まず Content-Security-Policy-Report-Only ヘッダーで影響を確認してから本番適用する、(3) インラインスクリプトには nonce または hash を使用し 'unsafe-inline' を避ける、という段階的な導入が推奨されます。