2026年8月27日
2026年8月27日
Nginxのセキュリティヘッダー(HSTS/CSP/X-Frame-Options)設定方法
はじめに
Webアプリケーションのセキュリティを高めるために、NginxでHTTPセキュリティヘッダー(HSTS、CSP、X-Frame-Options)を設定することが重要です。これらのヘッダーはブラウザが通信する際に重要な規則やポリシーを設定し、クロスサイトスクリプティング攻撃(XSS)、フレーム埋め込み、およびその他の脆弱性に対する防御を強化します。
症状・背景
このテーマが必要になる主な場面は以下の通りです:
- Webアプリケーションが悪意のあるユーザーや攻撃者から保護される必要がある場合
- クロスサイトスクリプティング(XSS)やフレーム埋め込みの脆弱性を防ぐため
- ブラウザからのリダイレクトと通信を制御し、セキュアな通信を確保する必要がある場合
手順・設定方法
ステップ1: HSTS(HTTP Strict Transport Security)
# HSTSヘッダーを有効にする
server {
listen 80;
server_name example.com www.example.com;
# ヘッダーの設定
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
}
ステップ2: CSP(Content Security Policy)
# CSPヘッダーを有効にする
server {
listen 443 ssl;
server_name example.com www.example.com;
# CSPのポリシー設定
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; object-src 'none'";
}
ステップ3: X-Frame-Options
# X-Frame-Optionsヘッダーを有効にする
server {
listen 443 ssl;
server_name example.com www.example.com;
# ヘッダーの設定
add_header X-Frame-Options "DENY";
}
ステップ4: 実践/トラブルシュート/監視
# 設定が正しく反映されているか確認するためのコマンド
curl -I https://example.com | grep 'Strict-Transport-Security'
curl -I https://example.com | grep 'Content-Security-Policy'
curl -I https://example.com | grep 'X-Frame-Options'
注意事項
- HSTS設定の注意点: 一旦有効化すると、ブラウザはその期間内にHTTPS通信のみを許可するため、不適切な操作により一時的にウェブサイトが利用不可になる可能性があります。初期設定では
max-age=0にして実際の設定を行う前に確認することをお勧めします。 - CSPポリシーの注意点: 一部のコンテンツ(フレームやサードパーティースクリプト)を許可しないように設定する場合、そのコンテンツが利用できないことになります。慎重にテストを行い、必要最低限の許可を設定することが重要です。
- セキュリティ上の注意: 上記のヘッダーは攻撃者に対して情報を明示的に提供しないように、適切なポリシーを設定し、必要な例外も考慮に入れる必要があります。
まとめ
1. HSTS: ブラウザが常にHTTPS通信を行うように制御します。
2. CSP: コンテンツの信頼性を確保し、攻撃から保護します。
3. X-Frame-Options: ウェブページをフレームやウィンドウ内に表示させない制約を設けます。
4. 注意点: 各ヘッダーの設定は慎重に行い、必要最低限のポリシーを設定することです。
関連記事: