セキュリティヘッダー

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 が厳しすぎてインラインスクリプトが動かない → noncehash で許可
  • HSTS を設定後に HTTP に戻せない → max-age を短くしてテスト
  • X-Frame-Options: DENY で自サイトの iframe 埋め込みも拒否 → frame-ancestors 'self' を使う

実践的な知識は関連書籍でも得られる。

関連用語