セキュリティヘッダー
HTTP レスポンスヘッダーでブラウザのセキュリティ機能を制御し、XSS やクリックジャッキングを防ぐ仕組み
セキュリティHTTP
セキュリティヘッダーとは
セキュリティヘッダーは、HTTP レスポンスに付与するヘッダーで、ブラウザのセキュリティ機能を有効化し、XSS、クリックジャッキング、MIME スニッフィングなどの攻撃を防ぐ。
主要なヘッダー
主要なヘッダーを以下にまとめる。
| ヘッダー | 防ぐ攻撃 | 推奨値 |
|---|---|---|
Content-Security-Policy |
XSS、データインジェクション | default-src 'self' |
Strict-Transport-Security |
ダウングレード攻撃 | max-age=31536000; includeSubDomains |
X-Content-Type-Options |
MIME スニッフィング | nosniff |
X-Frame-Options |
クリックジャッキング | DENY |
Referrer-Policy |
リファラー情報の漏洩 | strict-origin-when-cross-origin |
Permissions-Policy |
ブラウザ機能の制限 | camera=(), microphone=() |
Content-Security-Policy (CSP)
ページが読み込めるリソースの出所を制限する。XSS 攻撃で注入されたスクリプトの実行を防ぐ。
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;
| ディレクティブ | 制御対象 |
|---|---|
default-src |
全リソースのデフォルト |
script-src |
JavaScript |
style-src |
CSS |
img-src |
画像 |
connect-src |
fetch, XHR, WebSocket |
frame-ancestors |
iframe での埋め込み元 |
Strict-Transport-Security (HSTS)
ブラウザに「このサイトには常に HTTPS でアクセスせよ」と指示する。HTTP → HTTPS のリダイレクト前に攻撃される中間者攻撃を防ぐ。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
CloudFront での設定
CloudFront のレスポンスヘッダーポリシーでセキュリティヘッダーを一括設定できる。
確認方法
確認方法の例を示す。
# ヘッダーの確認
curl -I https://example.com
# securityheaders.com で A+ を目指す
よくある失敗
- CSP が厳しすぎてインラインスクリプトが動かない →
nonceやhashで許可 - HSTS を設定後に HTTP に戻せない →
max-ageを短くしてテスト X-Frame-Options: DENYで自サイトの iframe 埋め込みも拒否 →frame-ancestors 'self'を使う
実践的な知識は関連書籍でも得られる。
この記事は役に立ちましたか?
関連用語
CSP レポート
Content Security Policy 違反をブラウザがサーバーに自動報告し、XSS やデータ漏洩を検知する仕組み
CORS
ブラウザの同一オリジンポリシーを緩和し、異なるオリジン間のリソース共有を許可する仕組み
XSS
Web サイトに悪意のあるスクリプトを注入し、ユーザーの情報を盗む攻撃
CSP
Content Security Policy の略で、Web ページで実行可能なリソースの出所を制限するセキュリティ機構
CSRF
ユーザーが認証済みの Web サイトに対して、攻撃者が意図しないリクエストを送信させる攻撃手法
TCP/IP
インターネット通信の基盤となるプロトコル群で、データの分割・送信・再組立を信頼性高く行う