First CH Apps / WordPress簡易診断
URLを入れると、そのサイトが WordPress かどうか・テーマ名・名乗っている範囲のバージョンと、よくある露出(REST APIのユーザー名列挙・xmlrpc.php・著者アーカイブ・既定のログインURL・readme.html・デバッグログ)を診断します。当社が自社サイトへ毎週かけているセキュリティ監査の、汎用部分をそのまま移植したものです。
見に行くのはWordPressの既定パス7本だけで、攻撃的な列挙はしません(総当たり・POST・プラグインの全数走査はしない=当社の監査と同じ方針)。CMSの判定だけが要るなら「技術スタック検出」、ヘッダーの採点は「セキュリティヘッダー採点」が担当します。
自社サイト・管理を引き継いだサイトのURLを入れてください。サブディレクトリ設置(example.com/blog/)も、トップページのURLから自動で判別します。
自分が管理しているサイト、または管理の許可を得ているサイトにだけ使ってください。 公開GETだけを行う読み取り専用の診断ですが、他人のサイトを無断で調べる用途は想定していません。
トップページを1回取得したうえで、WordPressの痕跡があった場合にだけ次の既定パスをGETします(並列・各8秒上限)。パラメータの改変も総当たりもしません。
/wp-json/wp/v2/usersユーザー名の列挙(REST API)/?author=1ユーザー名の露出(著者アーカイブ)/xmlrpc.phpxmlrpc.php/wp-login.php既定のログインページ/readme.htmlreadme.html(バージョンの露出)/wp-content/debug.logデバッグログ/wp-json/REST API の入口「露出」は即座に危険という意味ではありません。 既定のままなら普通に出る項目(REST API・ログインページ)も含めて、保守の打ち合わせで論点になるものを並べています。優先度は「要対応」「要確認」「参考」で示しています。
バージョンは自己申告だけを表示します。 meta generator・コア資産の ?ver=・readme.html のいずれかで名乗っている値で、推測はしません。ここに出るということは、攻撃側にも同じ値が見えているということです。
「塞がれている」は完全な安全を意味しません。 前段のCDN・WAFが遮っているだけで、オリジンには残っていることがあります。逆に「判定できず」は、接続できなかった・応答が読めなかった場合です。
見るのは入力された1つのサイトの既定パスだけです。プラグインの脆弱性の有無・テーマの改造・管理画面の設定までは分かりません(それらは実際にサイトを触らないと分かりません)。
WordPressの痕跡が1つも無いサイトには、露出チェックを実行しません。無関係なサイトへ既定パスのリクエストを送らないためです。
送るもの: 入力されたURLだけ。当社サーバー(Cloudflare Workers)がそのURLを公開GETで1回取得し、WordPressの痕跡があった場合にのみ既定パス7本を追加でGETします(合計8回・Cookieもログイン情報も送りません)。
保存するもの: ありません。診断はリクエストの中だけで完結し、URL・結果ともデータベース(KV/D1)へ書き込みません。処理が終わった時点でメモリから消えます。
返すもの: 判定・テーマ名・バージョン・各チェックのHTTPステータスと合致した短い断片だけです。取得したページの原文もヘッダー一覧も再配信しません(このアプリは他サイトを閲覧するための中継として使えません)。
ユーザー名は返しません。 REST APIでユーザー一覧が読めてしまう場合も、画面とAPIに出すのは「露出している」ことと件数だけです。読み取った名前はサーバー内で数えた時点で捨てます。
Cookie: Set-Cookie は名前だけを判定に使い、値には触れません。ログイン不要の公開ページをそのまま取得するだけです。
注意: 取得は公開GETのみで、社内ネットワーク・localhost・プライベートIP宛のURLは受け付けません。
POST /wp-check/api/check に JSON({"url": "https://example.com/"})またはフォームを送ると、同じ診断結果が JSON で返ります。