セキュリティヘッダーチェック

セキュリティヘッダーは、サーバーがすべての HTTP レスポンスに付加する指示であり、ブラウザにデフォルトでは有効でない保護をオンにするよう伝えます:注入されたスクリプトをブロックし、HTTPS を強制し、フレーム埋め込みを拒否し、MIME スニッフィングを止めます。URL を入力すると、このチェッカーは最終レスポンスを取得し、6 つのヘッダーを 100 点満点で採点し、それぞれについて実際に見つかった値を表示し、リスクを 1 行で説明し、ヘッダーが不足または弱い場合に貼り付ける Nginx または Apache の設定をお渡しします。クイック版だけでよければ、ウェブサイトヘルスチェックの総合レポートにはすでにセキュリティヘッダーのサブスコアが含まれています——このページは詳細版です:ヘッダー別のグレードと修正、それだけです。

最終更新:

これを継続的に監視したいですか?myeventwatch で無料監視——有効期限とダウンタイムのアラート、カード不要。

詳細版——ヘルスチェックのクイックスコアの隣に

ウェブサイトヘルスチェックは広い問い——このサイトは全体として健全か?——に答え、セキュリティヘッダーを多数のサブスコアの一つとしてその答えに畳み込みます。それは定期健診として正しい形ですが、どのヘッダーが点数を失ったのか、サーバーが実際にどんな値を送ったのか、修正のために設定へ何を貼ればよいのかは教えてくれません。このページはその後の作業のためにあります:1 回の取得、6 つの採点対象ヘッダー、文字グレード、そして不足または弱いヘッダーごとに、それを追加または強化する正確な Nginx と Apache の行です。ここにブラックボックスはありません——完全な採点表は下のファクト欄に公開されており、それはまさにチェッカーが採点に使う表です。

チェックの仕組み:チェッカーは入力された URL をリクエストし、リダイレクトをたどり、最終レスポンスのヘッダーを採点します——それはブラウザが実際にページを構築する元になるレスポンスです。これは通常の HTTP 取得であり、ブラウザではありません:JavaScript は実行されず、サブリソースは読み込まれず、他のパスやログイン後にのみ現れるヘッダーは見えません。スコアが測るのは特定の 1 層——この 6 つのブラウザ向け保護が存在し、かつ強いかどうか——だけです。サイトは 100 点でもアプリケーションのバグを抱えていることがあり、F でも侵害されたことがない場合があります。グレードは重み付きの堅牢化チェックリストとして扱い、サイト全体のセキュリティへの判決とは捉えないでください。

影響の大きい順に直す

スコアの大部分は安く取り戻せます。X-Content-Type-Options、フレーム保護、Referrer-Policy は各 1 行で、通常のサイトでは何も壊しません。Strict-Transport-Security も 1 行ですが、すべてのページとサブドメインが本当に HTTPS で動作するときにだけ送ってください——1 年の max-age は、ブラウザがあなたに守らせる約束です。Permissions-Policy には、ページが実際にどのブラウザ機能を使うかを 10 分考える必要があります。Content-Security-Policy は最も点数が大きく、リスクも最大です:まず Content-Security-Policy-Report-Only として導入し、違反レポートを観察し、壊れたものを直してから、初めて強制してください。コンパニオンガイドセキュリティヘッダー解説では、各ヘッダーが実際に何を止めるのか、なぜ修正順序がこの順序なのかを順に説明します。

隣のチェック:トランスポートセキュリティはこの物語のもう半分です——SSL グレーダーは TLS 設定そのものを採点し、このページはその接続の上でサーバーが何を言うかを採点します。ヘッダーに加えて可用性、DNS、証明書の有効期限を含む広い定期健診には、ウェブサイトヘルスチェックに戻ってください。

方法についての注意:結果はある時点での 1 回の取得のスナップショットです。CDN や複数サーバーの構成では、リクエストごとに異なるヘッダー集合が返ることがあるため、意外な結果が出たら設定を変える前に 1 回再チェックする価値があり、変更後にも再チェックする価値があります。オリジンで追加したヘッダーが、その手前のプロキシを常には生き残るとは限らないからです。

公開されている採点表

Content-Security-Policy — 35 点「良い」とは、強制されているポリシー(Report-Only は数えません)で、スクリプトを 'unsafe-inline' と 'unsafe-eval' から遠ざけ、リソースの読み込み元を制限していることです。最も重い重みです。CSP は注入スクリプトへの主防御だからです。
Strict-Transport-Security — 20 点「良い」とは、HTTPS で送られ、max-age が少なくとも 1 年(31536000 秒)であることです。includeSubDomains はさらに強化します。短い max-age は部分点になります。
フレーム保護 — 15 点「良い」とは、CSP の frame-ancestors ディレクティブ、または DENY か SAMEORIGIN に設定された X-Frame-Options ヘッダーであり、他のサイトがクリックジャッキングのためにあなたのページをフレームに埋め込めなくなります。
X-Content-Type-Options — 10 点「良い」とは唯一の値 nosniff であり、ブラウザがレスポンスを MIME スニッフィングで別の実行可能な型に変えられなくなります。
Referrer-Policy — 10 点「良い」とは、完全な URL を他のオリジンへ決して送らないポリシーです——strict-origin-when-cross-origin、またはそれより厳しいもの(same-origin、no-referrer)。
Permissions-Policy — 10 点「良い」とは、ヘッダーが存在し、カメラ、マイク、位置情報など、サイトが使わない強力なブラウザ機能をオフにしていることです。
Cross-Origin-Opener-Policy — ボーナス採点対象ヘッダーと並んで報告されますが、点数にはなりません:あなたのページをクロスオリジンのウィンドウから分離し、公開された重みが上記 6 ヘッダーちょうどになるよう、意図的に 100 点の外に置かれています。
グレード95 以上が A+、90+ が A、80+ が B、65+ が C、50+ が D、35+ が E、35 未満が F です。点数はヘッダーごとに、見つかった値の強さに応じて与えられます。不足しているヘッダーはその行が 0 点です。

よくある質問

スコアはどう計算されるのですか——ブラックボックスですか?

いいえ。6 つのヘッダーは固定された公開の重みを持ちます——CSP 35、HSTS 20、フレーム保護 15、X-Content-Type-Options 10、Referrer-Policy 10、Permissions-Policy 10——合計 100 です。各ヘッダーは、チェッカーが見つけた値の強さに応じて満点、部分点、または 0 点を得て、文字グレードは上のファクト表の帯に従います。Cross-Origin-Opener-Policy はボーナスとして報告され、スコアには決して影響しません。

ウェブサイトヘルスチェックと何が違うのですか?

ウェブサイトヘルスチェックは広い健診——可用性、DNS、TLS、有効期限など——であり、セキュリティヘッダーはクイックなサブスコアとして現れます。このページはヘッダーだけを採点しますが、深く採点します:各ヘッダーについて見つかった正確な値、ヘッダー別の判定と点数、平易な言葉でのリスク、そしてコピー&ペースト用の Nginx / Apache 修正です。問題を見つけるにはヘルスチェックを、直すにはこのページを使ってください。

どのレスポンスが採点されるのですか——私のサイトにはリダイレクトがあります?

採点されるのは、すべてのリダイレクトの後の最終レスポンスのヘッダーです。それがブラウザがページを構築する元になるレスポンスだからです。結果には最終 URL とステータスが表示され、チェーンがどこに着地したか分かります。注意点が 1 つ:これは静的な取得であり、ブラウザではありません——JavaScript は実行されません——そのため、フレームワークがクライアント側でのみ追加するヘッダーや、ログイン後や他のパスにのみ現れるヘッダーはグレードに含まれません。

私のサイトは F でした。ハッキングされたということですか?

いいえ。F は、最終レスポンスが 6 つの採点対象ヘッダーをほとんど、あるいはまったく含んでいなかったという意味です——デフォルトのサーバーやフレームワークのインストールでよくある状態です。それは、訪問者のブラウザが受け取れるはずの保護を受け取っていないということであって、サイト自体が侵害されたかどうかについては何も言いません。影響の大きい順に修正を進めて再チェックしてください:ほとんどのサイトは 1 日の午後で数グレード上がれます。

スコア 100 は私のサイトが安全という意味ですか?

いいえ——チェックした URL で、この 6 つのヘッダーが存在し、強いという意味です。ヘッダーは堅牢化の 1 層です:アプリケーションのバグ、弱いパスワード、古いソフトウェア、壊れた TLS 設定は直してくれません。このチェックを、トランスポートについては SSL グレーダー、全体像については ウェブサイトヘルスチェックと組み合わせてください。