無料ウェブサイトセキュリティチェッカー
サイトが訪問者をどのように保護しているかを確認します:HTTPS と http→https のリダイレクト、SSL/TLS 証明書、セキュリティヘッダーの値、Cookie のフラグ、CORS、混在コンテンツです。通常の GET と HEAD リクエストのみを送る、受動的で読み取り専用の設定チェックであり、ペネトレーションテストではありません。
このツールのチェック内容
HTTPS とリダイレクト
リダイレクト後にページが最終的に https:// になるか、途中のリダイレクト、そして http://yourdomain/ が HTTPS への恒久的なリダイレクト(301 または 308)を返すかを確認します。
SSL/TLS 証明書
証明書が信頼されていてドメインと一致しているか、使われている TLS のバージョン、発行者、有効期限までの日数。
HSTS の値
Strict-Transport-Security ヘッダーは、存在を確認するだけでなく内容を解析します:max-age が 180 日以上か、不正なディレクティブがないか、includeSubDomains があるか、そして preload フラグがある場合に preload リストが求める設定を満たしているかを確認します。
Content-Security-Policy のディレクティブ
各ディレクティブを読み取ります:スクリプトが制限されているか、'unsafe-inline'(nonce やハッシュを使っている場合は指摘しません)、'unsafe-eval'、script-src 内の *、https:、data: などの広範なソース、object-src、base-uri、そしてポリシーが Report-Only のみになっていないかを確認します。
クリックジャッキング対策
X-Frame-Options(無効な値や廃止された ALLOW-FROM を含む)、または * やスキームのみではない CSP の frame-ancestors ルール。
その他の保護用ヘッダー
X-Content-Type-Options は nosniff と完全に一致する必要があります。Referrer-Policy は unsafe-url や認識できない値がないか、Permissions-Policy は制限されていない機能がないかを確認します。クロスオリジン分離のヘッダーは情報として表示します。
バージョン情報の露出とソースマップ
バージョン番号を明かす Server、X-Powered-By、X-AspNet-Version、X-AspNetMvc-Version、X-Generator ヘッダーと、自サイトのスクリプト最大 3 件の公開されたソースマップ。
Cookie のフラグ
ページのレスポンスで設定される Cookie を、名前のみで確認します:HTTPS での Secure、名前からセッションやトークンと思われる Cookie の HttpOnly、Secure のない SameSite=None、SameSite の欠落、親ドメインを対象にした Cookie。
CORS
無害な架空の Origin(https://rudra-audit.invalid)を付けたリクエストを 1 回追加で送り、サーバーが任意のオリジンをそのまま返すか、さらに認証情報も許可しているか(これが危険な組み合わせです)を確認します。
混在コンテンツ
HTTPS のページ上にある http:// のスクリプト、スタイルシート、フレーム(アクティブな混在コンテンツ)と、http:// の画像やメディア(パッシブな混在コンテンツ)。
security.txt
/.well-known/security.txt が存在し、Contact 行と将来の日付の Expires があるかを確認します。これにより、セキュリティ研究者が連絡方法を知ることができます。
技術と外部から見える領域
ヘッダーや HTML から識別できるフレームワークやサービス、さらにログインフォーム、ページ内で言及されている API やドキュメントの URL、robots.txt などの公開ファイル。把握のために表示するもので、減点はありません。
クライアント側のパターン(手動での確認)
onclick などのインラインのイベントハンドラーや、Subresource Integrity なしで読み込まれるサードパーティのスクリプト。これらは確認を促す優先度の低いヒントであり、確認済みの脆弱性ではありません。
チェックの仕組み
ページに通常の GET リクエストを 1 回送り、リダイレクトをたどってレスポンスを読み取ります:ヘッダーの値、設定される Cookie(名前とフラグのみ)、HTML です。あわせて、少数の決まった読み取り専用リクエストを送ります:証明書を検証するための TLS 接続、CORS 用に無害なテスト Origin を付けた GET を 1 回、リダイレクトの仕方を確認するための http://yourdomain/ へのリクエストを 1 回、許可リストにあるファイル /.well-known/security.txt、robots.txt、sitemap.xml、humans.txt、ページがリンクしているマニフェスト、そして自サイトのスクリプト最大 3 件について、ファイルの末尾と、そこに記載されたソースマップへの HEAD リクエストです。
何も送信せず、認証情報も送らず、攻撃用のペイロードも使わず、パスを推測することもありません。プライベートネットワークや内部ネットワークのアドレスへのリクエストはブロックされます。ページがサーバーエラー(5xx)を返した場合、エラーページは実際のサイトと異なることが多いため、ヘッダーは分析しません。それらのチェックは不合格ではなく、未実行として表示します。
スコアは 100 点から開始し、すべての減点がレポートに表示されます。HTTPS を使っていないと 40 点、証明書が無効または期限切れで 40 点、TLS 接続の失敗で 30 点、認証情報付きで任意のオリジンを信頼する CORS で 25 点、HSTS ヘッダーがないと 15 点、CSP がないと 12 点の減点です。弱い設定の減点はより小さく、たとえば http→https のリダイレクトなしは 10 点、アクティブな混在コンテンツは 8 点、Report-Only のみの CSP は 8 点、'unsafe-inline' のスクリプトは 6 点、Secure のない Cookie は 6 点、短い HSTS の max-age は 5 点です。security.txt がないなど、多くの情報レベルの検出結果では減点されず、同じ問題で二重に減点することもありません。
表示される根拠
各ヘッダーは実際の値とわかりやすい評価(良好、不十分、なし)とともに表示します。CSP の検出結果には解析したディレクティブの表を、Cookie の検出結果には Cookie の名前とフラグを表示し、値は表示しません。CORS の結果にはテスト用のオリジンと返ってきた内容を表示します。各検出結果には、期待される内容、対象の URL、チェックの確実性、根拠の取得元 — HTTP レスポンス、HTML、TLS 接続 — を示します。
このツールでチェックしないこと
ペネトレーションテストではありません
脆弱性の悪用、攻撃用のペイロード、総当たり攻撃、隠れたパスの推測は行いません。どのブラウザでも受け取る設定を読み取るだけです。
ログインが必要なページ
サインインや認証情報の送信は一切行わないため、認証が必要なページ、管理画面、アカウント設定はテストしません。
コードと依存関係
サーバー側のコードレビューや、CMS、プラグイン、ライブラリ、サーバーソフトウェアの脆弱性スキャンは行いません。
マルウェアや乗っ取られたサイト
マルウェア、改ざん、スパムの埋め込み、アカウントの流出は調べません。
サイトが使うすべての Cookie
確認できるのは、ページ自体のレスポンスで設定される Cookie だけです — 後から JavaScript、他のページ、第三者によって追加されるものは含まれません。Cookie の値を読み取ることはありません。
フォームの動作
フォームの存在は記録しますが送信はしないため、サーバー側の検証、CSRF 対策、レート制限はテストできません。
よく見つかる問題
HSTS がない、または短すぎる
すべてを HTTPS にリダイレクトしているサイトでも非常によく見られます。また、テスト時のまま残った数分の max-age では、ほとんど保護になりません。
CSP がない、または許可範囲が広すぎる
最もよく欠けているヘッダーです。設定されていても、script-src 内の 'unsafe-inline'、'unsafe-eval'、* によって、保護の大部分が無効になっていることがよくあります。
クリックジャッキング対策がない
X-Frame-Options も frame-ancestors ルールもない状態。
期限切れ間近の証明書
たいていは、サーバーや DNS の変更後に自動更新が止まってしまったことが原因です。
サーバーのバージョンが見えている
「Server: Apache/2.4.41」や「X-Powered-By: PHP/7.4」のようなヘッダーは、攻撃者に狙いどころを教えてしまいます。
リダイレクトされない HTTP
http://yourdomain/ がまだページを配信しているか、一時的なリダイレクト(302)しかしていないため、ドメインだけを入力した訪問者が暗号化されていない状態で閲覧できてしまいます。
Secure や HttpOnly のないセッション Cookie
スクリプトから読み取れる、または暗号化されていない HTTP で送信される可能性のある、ログインやセッションの Cookie。
直し方
サイトを配信している場所でヘッダーを設定する
ヘッダーは、ウェブサーバー(Nginx の add_header、Apache の Header set)、CDN、またはホスティングの設定やヘッダーファイルで設定します。実際にブラウザに届く値を確認するため、チェックを再実行してください。
HTTPS がすべてで機能したら HSTS を有効にする
Strict-Transport-Security: max-age=31536000 を使ってください(当チェックで許容する最小値は 180 日です)。includeSubDomains は、すべてのサブドメインが HTTPS に対応している場合にだけ追加し、preload は最後にしてください。
CSP は段階的に強化する
まず Content-Security-Policy-Report-Only から始め、その後で強制モードに切り替えます。'unsafe-inline' は nonce やハッシュに置き換え、'unsafe-eval' を削除し、* や https: の代わりに正確なスクリプトのオリジンを列挙し、object-src 'none' と base-uri 'self' を追加してください。
シンプルなヘッダーを追加する
X-Content-Type-Options: nosniff、Referrer-Policy: strict-origin-when-cross-origin、X-Frame-Options: DENY(または SAMEORIGIN)は、何かを壊すことはほとんどありません。
証明書の更新とリダイレクトを自動化する
マネージド証明書か、自動更新付きの Let's Encrypt を使い、すべての http:// へのリクエストを 301 または 308 で同じ https:// の URL にリダイレクトしてください。
バージョン番号を隠す
バージョン情報の出力をオフにし(例:Nginx では server_tokens off、PHP では expose_php = Off)、意図しない限り本番環境でソースマップを公開しないでください。
Cookie にフラグを付ける
HTTPS のサイトではすべての Cookie に Secure を付け、セッションやログインの Cookie には HttpOnly を追加し、SameSite=Lax(または Strict)を明示的に設定してください。SameSite=None には必ず Secure が必要です。
よくある質問
これはペネトレーションテストや脆弱性スキャンですか?
いいえ。通常の GET と HEAD リクエストのみを使って、どのブラウザでも受け取る設定 — HTTPS、証明書、ヘッダーの値、Cookie のフラグ、CORS — を読み取ります。脆弱性を探したり悪用したりはしません。それが必要な場合は、資格のあるセキュリティテスターに依頼し、書面で許可を与えてください。
サイトがハッキングされたかどうかわかりますか?
いいえ。マルウェア、改ざんされたページ、乗っ取られたアカウントはスキャンしません。スコアが高いということは、通信とブラウザのセキュリティのうち外から見える部分が適切に設定されているという意味であり、あらゆる面でサイトが安全だという意味ではありません。
ヘッダーの良し悪しも判定しますか?
はい、主要なものについては確認します。HSTS は max-age が 180 日以上か、不正なディレクティブがないかを確認し、CSP は 'unsafe-inline'、'unsafe-eval'、広範なスクリプトソース、object-src や base-uri の欠落がないか、ディレクティブごとに解析します。X-Frame-Options、X-Content-Type-Options、Referrer-Policy の値も検証します。
HTTP のサイトで HSTS がチェックされないのはなぜですか?
HSTS は HTTPS 経由でのみ効果があります。サイトが HTTPS でない場合はそれがより大きな問題なので、代わりにそちらを報告します。
セキュリティヘッダーを追加するとサイトが壊れることはありますか?
ほとんどのヘッダーは安全に追加できます。Content-Security-Policy は、サイトが必要とするスクリプト、スタイル、埋め込みをブロックする可能性があるため、まず report-only モードでテストしてください。Cookie に Secure や SameSite を追加すると、複数のドメインにまたがるログインに影響する場合があるため、追加後にサインインをテストしてください。
CORS のチェックはサイトにとって安全ですか?
はい。存在し得ないドメイン(rudra-audit.invalid)の Origin ヘッダーを付けた通常の GET リクエストを 1 回送るだけです。Cookie や認証情報は送らず、何も変更しません。返ってくる CORS ヘッダーを読み取るだけです。
一部の検出結果が手動での確認が必要と表示されるのはなぜですか?
インラインの onclick ハンドラーや Subresource Integrity のないスクリプトなどのパターンは、状況によって問題がない場合も危険な場合もあります。確認済みの問題として示すのではなく、確実性を低としてフラグを付け、判断をお任せしています。
役立つガイド
- How to check your website's security: what a passive check can and can't tell youWhat you can safely check about your own site's security in an afternoon, what a passive scanner actually looks at, and where you need a person instead.ガイドを読む
- What are security headers? What each one does and how to add themSecurity headers switch on protections built into every browser. What each one does, safe starting values, and how to add them on common servers and platforms.ガイドを読む
- Content-Security-Policy explained: directives, unsafe-inline, nonces and a safe rolloutCSP is the most powerful security header and the easiest to get wrong. The directives that matter, how nonces and hashes replace 'unsafe-inline', and a rollout plan that won't break your site.ガイドを読む
- How to check cookie security: Secure, HttpOnly, SameSite and cookie prefixesSession cookies are keys to your visitors' accounts. How each cookie attribute protects them, how to inspect your own cookies, and how to set them correctly.ガイドを読む
関連する無料ツール
修正を任せたいですか?
これらのチェックもガイドも無料です。変更作業を人に任せたい場合は、私たちのチームが有料でサポートします。