HTTPセキュリティヘッダーの設定(Content-Security-Policy、X-Frame-Options、X-Content-Type-Options)

HTTPセキュリティヘッダーの概要

HTTPセキュリティヘッダーは、Webサイトのセキュリティを強化し、さまざまな攻撃(XSS、クリックジャッキング、MIMEスニッフィングなど)を防ぐために利用されます。代表的なヘッダーとしてContent-Security-Policy(CSP)、X-Frame-Options、X-Content-Type-Optionsがあります。以下、それぞれの役割と設定方法を解説します。


Content-Security-Policy(CSP)

CSPは、Webページで読み込むことができるリソース(スクリプト、画像、スタイルシートなど)の出所を制限し、クロスサイトスクリプティング(XSS)などの攻撃を軽減します。

主なディレクティブと設定例

  • default-src 'self':同じオリジン(自サイト)からのリソースのみ許可。
  • img-src 'self' *.example.org:自サイトおよびexample.orgのサブドメインからの画像のみ許可。
  • script-src 'self' https://cdn.example.com:自サイトおよび指定したCDNからのスクリプトのみ許可。
  • style-src 'self' 'unsafe-inline':自サイトおよびインラインスタイルを許可(注意:'unsafe-inline'はセキュリティリスクあり)。
  • frame-src 'none':iframeによる埋め込みをすべて禁止。

設定方法

  • HTTPレスポンスヘッダーで設定(推奨)。
  • HTMLのmetaタグでも設定可能(サーバー設定ができない場合)。

Apache設定例

Header set Content-Security-Policy "default-src 'self'; img-src 'self' *.example.org; script-src 'self' https://cdn.example.com"

Nginx設定例

add_header Content-Security-Policy "default-src 'self'; img-src 'self' *.example.org; script-src 'self' https://cdn.example.com";

HTML metaタグ例

<meta http-equiv="Content-Security-Policy" content="default-src 'self'" />

注意点

  • default-src 'none'とするとCSSや画像など一切のリソースが読み込めなくなるため、基本的には'self'を推奨。
  • インラインスクリプトやevalを使う場合は'unsafe-inline'や'unsafe-eval'が必要だが、セキュリティリスクが高まる。
  • 適用前にテスト環境で動作確認を推奨。

X-Frame-Options

X-Frame-Optionsは、クリックジャッキング攻撃を防ぐため、ページがiframeやframeで表示されることを制限します。

主な値

  • DENY:すべてのフレーム内表示を禁止(最も安全)。
  • SAMEORIGIN:同一オリジンのみフレーム内表示を許可。
  • ALLOW-FROM uri:指定したURIからのみフレーム内表示を許可(非推奨・廃止予定)。

設定方法

Apache設定例

Header set X-Frame-Options "DENY"

Nginx設定例

add_header X-Frame-Options "DENY";

注意点

  • DENYが最も安全だが、iframeを使う必要がある場合はSAMEORIGINを検討。
  • CSPのframe-srcディレクティブと併用可能。

X-Content-Type-Options

X-Content-Type-Optionsは、ブラウザがContent-Typeヘッダーを無視してファイルの内容を推測(MIMEスニッフィング)するのを防ぎ、意図しないスクリプト実行を防止します。

設定方法

Apache設定例

Header set X-Content-Type-Options "nosniff"

Nginx設定例

add_header X-Content-Type-Options "nosniff";

注意点

  • nosniffのみ有効な値。
  • 画像やスタイルシートなど、正しいContent-Typeが必須となる。

まとめ表

ヘッダー名 主な用途 推奨設定例 補足
Content-Security-Policy XSS対策・リソース制限 default-src 'self'; img-src 'self' 適用前にテスト必須
X-Frame-Options クリックジャッキング対策 DENY または SAMEORIGIN DENYが最も安全
X-Content-Type-Options MIMEスニッフィング対策 nosniff 常に有効化推奨

参考:その他のセキュリティヘッダー

  • Strict-Transport-Security(HSTS):HTTPS通信を強制。
  • Referrer-Policy:リファラ情報の送信制御。
  • Feature-Policy / Permissions-Policy:ブラウザ機能の利用制限。

設定の流れ

  1. 現状のリソース利用状況を調査(どの外部ドメインから何を読み込んでいるか)。
  2. テスト環境でCSPを段階的に適用し、問題がないか確認。
  3. 本番環境に反映。
  4. 定期的にポリシーを見直し、新しいリソースやサービスに対応。

補足

  • CSP違反はブラウザの開発者ツール(Console)で確認可能。
  • セキュリティヘッダーは複数組み合わせて設定するのが効果的。
  • サーバー種別(Apache/Nginx等)に応じて設定方法が異なるので注意。

これらを適切に設定することで、Webサイトのセキュリティを大幅に向上させることができます。

インターネットからの画像

こちらもおすすめ