ガイド

セキュリティヘッダー不備の修正方法 (CSP, HSTS)

セキュリティヘッダーが欠落しているWebサイトは、クロスサイトスクリプティング (XSS)、クリックジャッキング、プロトコルダウングレード攻撃、セッション情報の漏洩などの重大な脅威に晒されます。

要約・回答

1年以上の有効期限とpreloadを指定したStrict-Transport-Securityを導入し、厳格なCSPを策定、X-Content-Type-Options: nosniffとframe-ancestors 'none'を設定します。

欠落しているレスポンスヘッダーの診断

Webサーバーの設定変更を行う前に、curl -IL コマンドや自動診断ツールを使用して現在のヘッダー状態を確認します。オリジンサーバー(Nginx、Apache)、リバースプロキシ、CDNエッジのどの層でTLSが終端されヘッダーが付与されているかを特定し、途中のゲートウェイでヘッダーが削除されていないかを検証します。

Strict-Transport-Security (HSTS) の安全な設定

HSTSはブラウザに対してHTTPS接続のみを強制し、中間者攻撃や暗号化ダウングレードを未然に防ぎます。検証段階では max-age=86400(1日)で動作を確認し、全サブドメインとリソースのHTTPS化完了後に本番用の max-age=31536000; includeSubDomains; preload を適用します。本番環境で max-age=0 を設定してはなりません。

堅牢な Content Security Policy (CSP) の構築

CSPはブラウザ上で実行可能なスクリプトやリソースの取得元を厳密に制限します。最初は Content-Security-Policy-Report-Only ヘッダーと report-to ディレクティブを用いて運用への影響を監視します。default-src 'self' を基準とし、'unsafe-inline' の代わりにnonceやハッシュを採用し、object-src 'none' および frame-ancestors 'none' を指定します。

クリックジャッキング・MIMEスニッフィング・リファラー漏洩防止

CSP内の frame-ancestors 'none' とレガシーブラウザ向け X-Frame-Options: DENY により、悪意あるiframeへの不正な埋め込みを完全に遮断します。X-Content-Type-Options: nosniff でブラウザによる危険なファイル解釈を防ぎ、Referrer-Policy: strict-origin-when-cross-origin で外部遷移時のURLパラメータ漏洩を抑止します。

Webサーバーでの実装手順と動作検証

NginxではHTTPSサーバーブロック内に always パラメータを付けた add_header ディレクティブを記述します(例: add_header X-Content-Type-Options "nosniff" always;)。これにより4xxや5xxのエラー画面でもヘッダーが確実に維持されます。Apacheでは mod_headers の Header always set を用い、nginx -t で構文を確認した後に再読み込みを行います。

セキュリティヘッダー: HTTPS、CSP、クリックジャッキング対策、MIME、Referrer、ブラウザ分離。

無料診断を開始 →

よくある質問

よくある質問と回答

本番ドメインで即座にHSTS preloadを有効化しても安全ですか?

危険です。まずは Strict-Transport-Security: max-age=86400(1日)で検証し、全サブドメインとAPIがHTTPSで正常に稼働することを確認してから、max-age=31536000 を設定して hstspreload.org に申請してください。

外部アナリティクスやスクリプトを壊さずにCSPを導入するにはどうすればよいですか?

まず Content-Security-Policy-Report-Only ヘッダーを使用して違反ログを監視し、必要な外部接続先を特定した上で、インラインスクリプトに nonce またはハッシュを付与してから本番強制モードに移行します。