セキュリティ
セキュリティヘッダーとは?6項目のチェックとA〜E評価の基準
ブラウザに安全な振る舞いを指示する、6種のセキュリティヘッダーの設定確認です。
セキュリティヘッダーとは何か
セキュリティヘッダーとは、Webサーバーがレスポンスの中でブラウザに送る、通信や表示に関する指示のことです。
ページの内容そのものとは別に、通信の暗号化を強制するか、外部からのスクリプト読み込みをどこまで許可するか、他サイトのフレームへの埋め込みを許すかといった、ブラウザ側の挙動を制御するルールが記述されます。ブラウザはこの指示を受け取ると指定された制限に従って動作するため、サーバー側の設定だけで一定の防御効果が得られる仕組みです。
どうして大事なのか
この6種のヘッダーは、それぞれ異なる攻撃手法に対する防御線として機能します。通信の暗号化を強制する仕組み、外部スクリプトの実行範囲を制限する仕組み、他サイトへの埋め込みを禁止する仕組みなど、担っている役割はヘッダーごとに異なり、1つがあらゆる脅威を防ぐわけではありません。
多層防御の考え方では、欠けているヘッダーの数だけ攻撃者に選択肢を与えることになるため、個々の重要性以上に合計でどれだけ揃っているかが評価の軸になります。
ここで引っかかると…
| ヘッダー | 欠けていると… |
|---|---|
| HSTS | 通信の一部がhttpに引き戻される中間者攻撃(SSL剥離)の余地が残ります。 |
| CSP | 外部から悪意あるスクリプトを注入されるXSSの被害が拡大しやすくなります。 |
| X-Frame-Options | 自サイトが他サイトのiframeに埋め込まれてクリックジャッキングに利用されることがあります。 |
| X-Content-Type-Options | ブラウザによるファイル種別の誤認識(MIMEスニッフィング)を許してしまいます。 |
| Referrer-Policy | 他サイトへの遷移時にURL情報が意図せず漏れることがあります。 |
| Permissions-Policy | カメラやマイクなど機能利用の制限ができません。 |
逆に6種のうち5個以上が設定されていればA評価となり、現状の水準としては安心といえる状態です。
直す方法
Nginxやapacheであればサーバー設定ファイルに、Cloudflareなどを使っていればレスポンスヘッダー編集機能やWorkersでヘッダーを追加します。例えばNginxならadd_header Strict-Transport-Security "max-age=31536000" always;のように1行ずつ追記できます。
CSPは制限が厳しいと既存のスクリプトやフォントの読み込みを止めてしまうため、Report-Onlyモードで挙動を確認してから本適用するのが安全です。まずはHSTSとX-Content-Type-Optionsのような設定コストの低いものから揃えるのが現実的です。
Kotoriではどうやって計測しているか
レスポンスヘッダーに含まれる6種類のセキュリティヘッダーの有無を確認します。対象はStrict-Transport-Security(HSTS)、Content-Security-Policy(CSP)、X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Permissions-Policyです。
設定されているヘッダーの数に応じてA〜Eの5段階で評価し、0個または1個ならE、2個ならD、3個ならC、4個ならB、5個以上ならAとなります。個々のヘッダーの中身の妥当性ではなく、まず「設定されているかどうか」を基準にした評価です。
セキュリティの他の項目