WordPress サイトが外部に何を公開しているか、セキュリティチェックするには?
執筆:Eureka Studio · 更新日
要点
ログアウトした状態で、実際のリクエストを使って WordPress サイトを外部からテストします。/wp-login.php、/xmlrpc.php、/wp-json/wp/v2/users、/?author=1、/wp-sitemap-users-1.xml を開いてみてください。それぞれ、ログインの入口が開いているか、ユーザー名が漏れているかを示します。ブラウザーや curl で実行することも、スキャナー機能のあるプラグインに実行させて見つかったものを名指しさせることもできます。
手順
1手順 1
プライベートウィンドウかターミナルを開く
自分としてではなく、見知らぬ他人としてテストします。ログイン中のリクエストには一般の人より多くのものが見えるため、必ずログアウトした状態で確認してください。
ボットが送る 5 つのリクエスト curl -sI https://yoursite.com/wp-login.phpcurl -s https://yoursite.com/xmlrpc.phpcurl -s https://yoursite.com/wp-json/wp/v2/userscurl -sI https://yoursite.com/?author=1curl -sI https://yoursite.com/wp-sitemap-users-1.xml2手順 2
ログインの入口を確認する
wp-login.php にログインフォームが表示されるなら、デフォルトのログインが公開されています。xmlrpc.php が「accepts POST requests only」と応答するなら、第二のログイン口も開いています。
3手順 3
ユーザー名の漏えいを確認する
/wp/v2/users が返す JSON の一覧、?author=1 から /author/name/ へのリダイレクト、ユーザーのサイトマップは、いずれもログイン名を明かしてしまいます。
4手順 4
攻撃面スキャンで全体像を把握する
Hushfort で「概要」を開き、「攻撃面スキャン」の下にある「再スキャン」を押します。サイトに実際のリクエストを送り、見つかったユーザー名を一つひとつ名指しします。

5手順 5
見つかったものを塞ぎ、もう一度スキャンする
「攻撃面の強化」をオンにして「再スキャン」を押します。赤だった入口には緑のチェックが付き、残ったものは「要確認」として修正案とともに表示されます。

なぜ重要なのか
セキュリティのアドバイスの多くは、スイッチの話です。これをオンに、あれを無効に。しかしスイッチが教えてくれるのは、あなたが何を頼んだかであって、実際に何が起きたかではありません。キャッシュ層が古い応答を返しているかもしれません。CDN のルールが、WordPress にリクエストが届く前にファイルをブロックしているかもしれません。あるプラグインが閉じたものを、別のプラグインが開け直しているかもしれません。「自分のサイトは何を公開しているのか」という問いに正直に答える唯一の方法は、見知らぬ他人と同じやり方でサイトに尋ねてみることです。
幸い、ログインまわりで確認すべきものの一覧は短くて済みます。ボットはどの WordPress サイトでも、同じ一握りのアドレスを探します:
| アドレス | 開いている場合に明かされるもの |
|---|---|
/wp-login.php、/wp-admin |
デフォルトのログインフォーム |
/xmlrpc.php |
第二のログイン口 (system.multicall による一括推測も可能) |
/wp-json/wp/v2/users |
投稿者とそのログインスラッグの一覧 |
/?author=1 |
/author/login-name/ へのリダイレクト |
/wp-sitemap-users-1.xml |
ログインスラッグを含む投稿者アーカイブの URL |
どれも単独では大惨事ではありません。しかし組み合わさると、ボットに名前の一覧と、それを試す 2 つの入口を渡すことになります。どれが開いているかがわかれば、正しい順序で塞げます。まず入口、次に名前です。
よくある間違い
- ログインしたままテストする。 WordPress はログイン中のユーザーにより多くを見せます。プライベートウィンドウか
curlを使いましょう。 - キャッシュされたページをテストする。 設定を変えた直後なら、先にページキャッシュと CDN のキャッシュを削除してください。そうしないと古い応答が表示されます。
- 最初の緑のランプで満足する。 ログインフォームを閉じても XML-RPC が開いたまま、というのが、私たちが最もよく目にする中途半端な対策です。
- 完全なセキュリティ監査を期待する。 これらのチェックが対象とするのは侵入経路です。マルウェア、ファイルの変更、古いプラグインについては何もわかりません。
プラグインを使わない方法
ステップ 1 の 5 つの curl コマンドが手作業での方法で、知っておく価値があります。結果は次のように読み取ります:
wp-login.phpでHTTP/2 200: デフォルトのログインが公開されています。404なら隠されています。xmlrpc.phpからXML-RPC server accepts POST requests only.: エンドポイントが生きています。ログインが受け付けられるかを確かめるには、テスト用アカウントでwp.getUsersBlogs呼び出しを送る必要があります。/wp/v2/usersから"slug"フィールドを含む JSON 配列: ユーザー名が公開されています。401または空の配列なら閉じています。?author=1からLocation: /author/name/: 漏えいです。2、3 と続けて試すと、ボットが何人分のユーザーを集められるかがわかります。- ユーザーのサイトマップで
200: 投稿者の URL が一覧化されています。
難点は手間と解釈です。変更のたびに繰り返す必要があり、XML-RPC のログインをきちんとテストするには XML を手で組み立てなければなりません。
うまくいかないときは
- オフにしたのにスキャンで「開いている」と表示される。 ページと CDN のキャッシュを削除して、もう一度スキャンしてください。それでも開いているなら、別のプラグインかサーバーのルールが設定を上書きしている可能性があります。
- スキャンがサイトにアクセスできない。 ホスティングによっては、サイトが自分自身にリクエストを送ること (ループバック) をブロックしています。ループバックリクエストを許可するようホスティング会社に依頼するか、外部から
curlの方法を使ってください。 - 強化した後もユーザー名が漏れている。 テーマの投稿者ボックスや、SEO プラグインの投稿者サイトマップを確認してください。テーマが表示名を出力している場合は、投稿者の表示名を変更します。
Hushfort なら
攻撃面スキャンは、無料の WordPress セキュリティプラグイン Hushfort Security に含まれています。
攻撃面スキャンは、Hushfort の「攻撃面の強化」パネルにあります。手作業の方法と同じく、実際のリクエストでサイトが実際に公開しているものを測定し、見つかったユーザー名を名指しで一覧表示します。それぞれの検出結果は、それを塞ぐ Hushfort のレイヤーに対応しています:
- XML-RPC のログイン → バックドアロック (Pro)
- REST ユーザー一覧、投稿者スキャン、サイトマップ → ユーザー名シールド (Pro)
- デフォルトのログイン → ログイン非表示 (無料)
攻撃面スキャンを作ったきっかけは、ログインページを隠していたにもかかわらず、XML-RPC 経由でパスワードの試行を受け続けたあるストアでした。設定は問題なさそうに見えましたが、開いた入口を示したのは実際のリクエストだけでした。
よくある質問
自分の WordPress サイトをスキャンしても法的に問題ありませんか?
設定を確認するのではなく、実際のリクエストでテストするのはなぜですか?
このチェックでマルウェアや脆弱なプラグインも見つかりますか?
どのくらいの頻度でチェックすべきですか?
関連するハウツー
WordPress のユーザー名漏えい(ユーザー列挙)を防ぐには?
WordPress のユーザー名漏えいを防ぐ方法。REST API、?author=N、投稿者アーカイブ、ユーザーサイトマップの 4 か所を塞いでテストします。
手順を読むxmlrpc.php とは何ですか? WordPress で無効化するには?
xmlrpc.php とは何か、WordPress で安全に無効化する方法を解説。ログインを隠しても残る入口を閉じ、ピンバックを残す方法も紹介します。
手順を読むWordPress のログイン URL を変更するには?
WordPress のログイン URL を変更して wp-admin を隠す 5 つの手順。ログアウト前のテストと、URL を忘れたときの戻り方も解説します。
手順を読む

