HTTP セキュリティヘッダー チェッカー
サイトの HTTP セキュリティヘッダーを採点し、欠けている項目が何を露出させるかを示します。
🌐 sitekits fetches the URL server-side (private/internal addresses are blocked). Only response headers are read — the body is never retrieved.
概要
セキュリティヘッダーは防御のうち応答だけで完結する部分なので、確認しやすく、
そして微妙に間違えやすいものです。ヘッダーは存在していて何もしていないことが
あります。max-age=0 は HSTS を切りますし、'unsafe-inline' を含む CSP は
注入された <script> を実行しますし、X-Frame-Options: ALLOW-FROM は現在
出荷されているどのブラウザからも無視されます。
このツールは URL をサーバー側で取得し、応答ヘッダーのみを読み、7 項目を 重み付き 100 点で採点します。重みはそれぞれが実際に何を防いでいるかを反映し、 各点数には「ヘッダーがありません」ではなく具体的な露出を述べた注記が付きます。
使い方
- URL を貼ります。スキームは省略できます(
httpsを仮定します)。 - 評点と項目別の点数を読みます。
- 注記を上から処理します。何が欠けているかではなく、何が露出しているかが書いてあります。
重みの意味
ヘッダーを数える方式は、すべての欠落を等しく扱います。実際には等しくありません。
X-Frame-Options の欠落は CSP の frame-ancestors で代替できますが、CSP の
欠落には代替がありません。
| 項目 | 重み | 理由 |
|---|---|---|
Content-Security-Policy | 25 | 注入されたスクリプトの実行と持ち出しを止める唯一のヘッダー |
Strict-Transport-Security | 20 | 最初のリクエストが HTTP に降格されるのを防ぐ |
| frame 保護 | 15 | クリックジャッキング。CSP frame-ancestors または X-Frame-Options で満たす |
X-Content-Type-Options | 10 | 誤った content-type がスクリプトとして再解釈されること |
Referrer-Policy | 10 | URL が他オリジンへどれだけ漏れるか |
Permissions-Policy | 10 | カメラ・マイク・位置情報が暗黙に開いたままになること |
| バージョン開示 | 10 | 保護ではなく減点項目。後述 |
値の読み方
CSP は 100 点から始まり、実際に弱くしている要素で減点します。有効な
script-src の 'unsafe-inline' は 45 点。ただし nonce も hash も無い場合
だけです。それらを理解するブラウザは 'unsafe-inline' を完全に無視するためです。
'unsafe-eval' は 20 点。base-uri の欠落は 15 点で、これが無いと注入された
<base> 要素がページ上のすべての相対 URL を書き換えます。スクリプトの読み込み先も
含みます。object-src 'none' の欠落は 10 点です。
Content-Security-Policy-Report-Only だけの場合は 0 点です。何も阻止しないので、
防御ではなく計測の手段です。
HSTS は max-age で採点します。1 年以上で 80 点、6 か月で 60 点、それより
短ければ 35 点、max-age=0 は HSTS を切るので 0 点です。includeSubDomains で
20 点加算され、正しいヘッダーが 100 点になるのはこの加算によります。6 か月は
ブラウザの preload リストの下限でもあるので、それより短い値は意図に関わらず
preload できません。
frame 保護 は CSP frame-ancestors で満点、X-Frame-Options: DENY /
SAMEORIGIN で 60 点です。動作はしますが仕様が先へ進んでいます。ALLOW-FROM
は 0 点です。Chrome は実装したことがなく、Firefox は 70 で削除したので、これに
頼っているページは埋め込み可能です。
バージョン開示 は唯一の減点項目です。Server: Apache/2.4.41 と
X-Powered-By: PHP/7.4.3 は、どの公開済み CVE を試せばよいかを攻撃者に正確に
伝えますし、どちらも何も守っていません。Server: cloudflare のように
バージョンを含まない値は減点しません。多くの CDN が必ず送るもので取り除けず、
減点すれば誰にも直せない項目になるからです。
このツールで見えないこと
ヘッダーは層の 1 つに過ぎません。満点は、TLS の設定、Cookie のフラグ、認証が 強制されているか、CSP が許可したオリジン自体が攻撃者の管理下にあるコンテンツを 配信していないか、については何も述べていません。
とくに Set-Cookie の属性は採点対象外です。応答単位ではなく Cookie 単位の
ものだからです。HttpOnly と Secure を欠いたセッション Cookie は重大な問題で、
ヘッダーの評点には決して現れません。
CSP も構文とキーワードで採点しており、許可リストの中身は評価していません。
script-src 'self' https://cdn.example.com は満点になり、その CDN が利用者の
アップロードした JavaScript を配信していれば保護は皆無です。評点はポリシーの
形を測るもので、ソースの妥当性は人が判断する部分です。
使用例
- 変更が本番に届いたかの確認 — CDN の設定変更の前後で採点します。オリジンで 設定したヘッダーはプロキシで削除・上書きされることが頻繁にあり、ブラウザが 受け取る形で見る最短の方法です。
- チームへの説明 — 注記は仕組みを述べるので、監査表に並んだヘッダー名より 説得力があります。
- リダイレクト先の確認 — 採点されるのは最終応答のヘッダーです。別ホストへ 転送するランディングページは、入口が持っていたヘッダーを 1 つも持たない場所へ 着地していることがよくあります。
- HSTS preload の申請前 — 申請には 1 年以上の
max-ageとincludeSubDomains・preloadが必要です。preload は取り消しが難しいので、 先にすべてのサブドメインでヘッダーを確認してください。 - ポリシー自体を作る — CSP ジェネレーター がディレクティブ 単位でヘッダーを組み立て、HTTP ヘッダー取得 が値をそのまま 必要とするときに応答全体を表示します。
注意事項
採点対象は最終応答のヘッダーです。リダイレクトがある場合、評点は着地点を表し、 経路も表示するので入口と行き先でヘッダーが違う状況に気づけます。
Permissions-Policy の代わりに Feature-Policy も同じ項目として受け付けます。
古い名前を送るサーバーがまだあるためです。Referrer-Policy は no-referrer・
same-origin・strict-origin・strict-origin-when-cross-origin で満点、
それ以外の値は半分です。必要以上に URL を他オリジンへ渡すからです。
ヘッダーのみを扱います。応答本文を取得・保存・転送することはありません。 プライベート・ループバック・リンクローカル・予約済みのアドレスへのリクエストは、 リダイレクト後も含めて接続前に拒否します。詳細は プライバシーポリシーに書いてあります。