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

HTTPSとセキュリティヘッダーをチェックします。HTTPのURL、混在コンテンツ、HSTSの欠落、安全でないフォームやサブリソースを検出し、1つのURLのヘッダーを評価します。

できること

URLごとのチェック

security-checkは、通常のGETリクエストを1回送ります。レスポンスヘッダー、Cookieのフラグ、httpからhttpsへのリダイレクトを読み取ります。6つのセキュリティヘッダーから0〜100のスコアとA〜Fの評価を算出し、バージョン情報を明かすヘッダーも記録します。ヘッダーの全体を見るにはheaders-checkを使います。

  • HSTS、CSP、X-Content-Type-Options、X-Frame-Options、Referrer-Policy、Permissions-Policy
  • CookieのフラグSecureとSameSite
  • httpがhttpsにリダイレクトされるか
  • 任意のパスのプローブ(既定ではオフ)

クロール全体のチェック

クロールでは、各ページについて、httpsページ上のhttpリソース、httpに送信するフォーム、httpのリンク、セキュリティヘッダーの欠落をチェックします。検出結果はページ単位で、原因となるURLも示します。

  • 混在コンテンツと安全でないサブリソース
  • http://のactionに送信するフォーム
  • httpsページにあるhttp://の内部リンク
  • HSTS、CSP、X-Content-Type-Options、X-Frame-Options、Referrer-Policyの欠落

公開されているパス

プローブのフラグを付けると、security-checkは.gitや.envなどのサービス用パスが応答するかどうかも確認します。これは意図的に追加する手順で、既定ではオフです。他人のサイトへの、読み取り専用のリクエストであっても、実行するかどうかは自分で選ぶべきだからです。ペネトレーションテストではありません。

  • 既定ではオフ
  • --probe-pathsを指定したときだけ実行
  • テストが許可されているサイトに限る

3ステップで、スキャンを1件保存

  1. 1つのURLのレスポンスを読む

    security-checkはGETリクエストを1回送り、レスポンスヘッダー、Cookieのフラグ、httpからhttpsへのリダイレクトを読み取ります。

  2. 6つのセキュリティヘッダーを評価する

    HSTS、CSP、X-Content-Type-Options、X-Frame-Options、Referrer-Policy、Permissions-Policyから、0〜100のスコアとA〜Fの評価を出します。

  3. クロール全体で混在コンテンツを検出する

    クロールでは、各ページについて、httpのリソース、安全でないフォームの送信先、セキュリティヘッダーの欠落や重複をチェックします。

この機能のチェック項目

チェック項目意味重要度根拠
FORM_URL_INSECUREフォームがhttp://のactionに送信しており、送るデータが暗号化されないCriticalページ上のフォームのaction URL
HTTP_URLURLがhttpsではなくhttpで配信されているImportantページのURL
MIXED_CONTENThttpsのページが、httpでリソースを読み込んでいるImportantページのURLと、httpのリソースのURL
INSECURE_SUBRESOURCEhttpsのページが、画像、スクリプト、スタイルシートをhttpで読み込んでいるImportantリソースのURLと、それを読み込むページ
MISSING_HSTSページがStrict-Transport-Securityヘッダーを送っていないTipページのレスポンスヘッダー
MISSING_CSPHTMLページがContent-Security-Policyヘッダーを送っていないTipページのレスポンスヘッダー
MISSING_X_FRAME_OPTIONSページにX-Frame-OptionsもCSPのframe-ancestorsディレクティブもないTipページのレスポンスヘッダー
DUPLICATE_SECURITY_HEADER同じレスポンスで、セキュリティヘッダーが複数回送られているTipヘッダー名と、重複して返しているレスポンス
チェック一覧にある関連項目
HTTP_LINK_ON_HTTPSMISSING_X_CONTENT_TYPE_OPTIONSMISSING_REFERRER_POLICY

コマンド1つで実行

bash
seohead security-check --url https://example.com/

先にインストールします: インストールガイド。どのコマンドも、AIエージェント向けのMCPツールとして実行できます。

必要なもの

  • security-checkに渡すページのURL
  • ページ単位のチェックに使うクロール結果
  • --probe-pathsを使う場合は、サイトをテストする許可

制限事項

  • 確認するのはヘッダーがあるかどうかで、値が十分に強力かどうかは判定しません
  • 1つのURLで得られるのは1つのレスポンスだけです。ほかのページは異なるヘッダーを返すかもしれません
  • ペネトレーションテストでも脆弱性スキャンでもありません
  • Permissions-Policyはsecurity-checkでは評価しますが、クロールの検出結果としては報告しません

よくある質問

サイトに変更を加えますか?
いいえ。security-checkは通常のGETリクエストを送り、サイトがもともと返している内容を読むだけです。.gitや.envなどのパスのプローブは既定ではオフで、--probe-pathsを指定したときだけ実行します。
評価はどのように計算されますか?
ヘッダーごとに加点します。HSTSが20、CSPが20、X-Content-Type-Optionsが15、X-Frame-Optionsが15、Referrer-Policyが15、Permissions-Policyが15です。90以上がA、75以上がB、60以上がC、40以上がD、20以上がE、それ未満はFです。CSPのframe-ancestorsディレクティブは、X-Frame-Optionsとして数えます。
ヘッダーの値もチェックしますか?
いいえ。確認するのは、各ヘッダーがあるかどうかです。弱いCSPでも、存在すれば満点になります。
1つのコマンドで、この一覧のチェックをすべて実行できますか?
いいえ。security-checkが対象とするのは1つのURLです。この一覧にあるページ単位のチェックはクロールから得られ、クロール結果にページごとに表示されます。
保存済みのクロールのヘッダーも確認できますか?
はい。headers-analyzeは、保存したスキャンに残るマスク済みのレスポンスヘッダーを、リクエストを送らずに読み取り、セキュリティヘッダーの検出結果を報告します。