HTTPセキュリティヘッダとは
HTTPセキュリティヘッダは、Webブラウザでホームページを見るとき、どのように振舞うかをブラウザに通知します。HTTPセキュリティヘッダを正しく追加することで、Webサイトのセキュリティを強化することが可能になります。せっかくSSL証明書を取得したのに、初期設定のまま使っているとセキュリティ上よくないと思い、HTTPセキュリティヘッダ設定を追加したので紹介します。
今回追加した設定は以下です。
HTTP STRICT TRANSPORT SECURITY(HSTS)
Webブラウザからの通信をHTTPS経由でのみ通信できるようにします。HTTP経由でサイトの閲覧ができなくなるので、SSL証明書を設定してから有効にしてください。max-ageで指定された時間(秒) HSTS設定をブラウザ上にキャッシュしてくれます。
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
X-FRAME OPTIONS
クリックジャッキングを防止するための設定で、Webサイト側でX-FRAME-OPTIONS設定することで、他のサイトのフレームを呼び出さないようにします。
クリックジャッキング:ボタンやリンクなどを見えない状態で配置してクリックさせる。
SAMEORIGIN:フレーム内のページ表示を同一ドメイン内のみ許可
Header always append X-Frame-Options SAMEORIGIN
X-XSS-Protection
クロスサイトスクリプティング攻撃が検出された場合、表示をブロックするようにします。
Header set X-XSS-Protection "1; mode=block"
X-Content-Type-Options
セキュリティヘッダー「X-Content-Type-Options: nosniff」を指定で、コンテンツタイプの自動判別を無効にすることで、クロスサイトスクリプティング(XSS)を抑制します。
Header always set X-Content-Type-Options nosniff
以下も追加で設定しておきました。
Webページ内のhttp://をhttps://として扱ってくれる。
Header always set Content-Security-Policy "upgrade-insecure-requests"
認証透過性ポリシーに違反するコネクションを拒否する。
Header always set Expect-CT "max-age=7776000, enforce"
ポリシーが指定されていない場合や値が無効な場合に、プロトコル水準が低下する場合はリファラーを送信しない。
リファラーはHTTPヘッダの1つで、それにリンクしているウェブページやリソースのアドレスを指している。リファラを見ることで、どこからそのページに要求が来たのかを知ることができる。
Header always set Referrer-Policy "no-referrer-when-downgrade"
上記設定を追加してセキュリティヘッダのチェックしてみました。
Analyse your HTTP response headers (securityheaders.com)
判定結果は「A」で、設定した内容が意図通りに反映されていることが確認できました。
設定が反映されない場合は、Apacheの”mod_headers”が有効になっているか確認してみてください。あと、.htaccessの設定を有効にするのを忘れずに。
$sudo a2enmod headers $sudo apache2ctl restart