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:ブラウザ機能の利用制限。
設定の流れ
- 現状のリソース利用状況を調査(どの外部ドメインから何を読み込んでいるか)。
- テスト環境でCSPを段階的に適用し、問題がないか確認。
- 本番環境に反映。
- 定期的にポリシーを見直し、新しいリソースやサービスに対応。
補足
- CSP違反はブラウザの開発者ツール(Console)で確認可能。
- セキュリティヘッダーは複数組み合わせて設定するのが効果的。
- サーバー種別(Apache/Nginx等)に応じて設定方法が異なるので注意。
これらを適切に設定することで、Webサイトのセキュリティを大幅に向上させることができます。
