セキュリティヘッダー

HTTP レスポンスヘッダーでブラウザのセキュリティ機能を制御し、XSS やクリックジャッキングを防ぐ仕組み

セキュリティHTTP

セキュリティヘッダーとは

セキュリティヘッダーは、HTTP レスポンスに付与するヘッダーで、ブラウザのセキュリティ機能を有効化し、XSS、クリックジャッキング、MIME スニッフィングなどの攻撃を防ぐ。

主要なヘッダー

主要なヘッダーを以下にまとめる。

ヘッダー防ぐ攻撃推奨値
Content-Security-PolicyXSS、データインジェクションdefault-src 'self'
Strict-Transport-Securityダウングレード攻撃max-age=31536000; includeSubDomains
X-Content-Type-OptionsMIME スニッフィング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-srcJavaScript
style-srcCSS
img-src画像
connect-srcfetch, XHR, WebSocket
frame-ancestorsiframe での埋め込み元

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' を使う

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

この記事は役に立ちましたか?

関連用語

関連する記事