前回のおさらい:「?author=1」でユーザー名が漏洩するリスク
WordPressには、適切な対策をしていないと簡単にユーザー名(スラッグ)が取得されてしまう脆弱性があります。
前回の記事「?author=1」でユーザーIDが特定される?では、「?author=1」 を使うことで管理者のスラッグが取得され、それがログインIDと同じ場合、不正ログインのリスクが高まる問題について解説しました。
しかし、実はこの問題だけではありません。「/wp-json/wp/v2/users」 というURLを使うと、ユーザーID(数値)やユーザー名(スラッグ)が取得できてしまうのです。
ご自分のウェブサイトを今すぐチェックしてみてください!
REST API経由でユーザー名が漏洩!?
REST APIとは?
WordPressには、開発者向けの機能として REST API という仕組みが備わっています。
これは、外部のシステムやアプリと連携するための機能で、例えば次のようなことができます。
- 記事の取得・編集(スマホアプリなどから記事を投稿)
- ユーザー情報の取得(プロフィール情報の表示など)
- 外部ツールとの連携(プラグインやカスタム機能の開発)
この機能はとても便利ですが、 適切な制限をしていないと、誰でも簡単にサイトのユーザー情報を取得できてしまう というリスクがあります。
実際に試してみよう:「/wp-json/wp/v2/users」の危険性
あなたのWordPressサイトがこの問題の影響を受けているか、簡単に確認する方法があります。
🔍 チェック方法
ブラウザのアドレスバーに、以下のURLを入力してください。
https://ドメイン/wp-json/wp/v2/users
このURLを開いたとき、サイトに登録されているユーザー情報(ユーザー名・IDなど)が一覧表示されてしまう場合は要注意です。
攻撃者がこの情報を悪用すると、不正ログインのリスクが格段に高まります!
なぜ「/wp-json/wp/v2/users」からの情報漏洩が危険なのか?
「/wp-json/wp/v2/users」にアクセスすると、 ユーザーID(数字)・ユーザー名・表示名 などが誰でも取得できる状態になっていることがあります。
この情報が外部に知られてしまうと、 ログインIDを推測されるリスク があります。特にユーザー名がそのままログインIDとして使われている場合、不正ログインの標的になりやすくなります。
「?author=1」と「/wp-json/wp/v2/users」の違いとは?
攻撃手法 | 取得できる情報 | 危険度 |
?author=1 | ユーザー名(スラッグ) | 中 |
/wp-json/wp/v2/users | ユーザーID(数字)、ユーザー名、表示名 | 高 |
「?author=1」ではユーザー名(スラッグ)のみ取得できますが、 「/wp-json/wp/v2/users」ではより多くの情報が取得できてしまう ため、より危険度が高いとされています。
実際に起こりうる被害
ログインIDが分かれば、あとはパスワードを突破するだけで不正ログインが成立してしまいます。
攻撃者は以下の手口で狙ってきます!
・ブルートフォースアタック(総当たり攻撃)
→ ユーザー名が分かっていれば、パスワードを試行し続けるだけでログイン突破
・辞書攻撃(よく使われるパスワードのリストを試す)
→ 「password123」「admin」「qwerty」など、よく使われるパスワードを自動試行
・フィッシング攻撃
→ 偽のセキュリティ警告メールでパスワードを盗む
だからこそ、今すぐ対策が必要!
「ログインIDがバレると、サイトが乗っ取られるリスクが上がる」
この事実をしっかり認識し、次のステップで適切な対策を実施しましょう!
「/wp-json/wp/v2/users」のユーザー名漏洩を防ぐ方法
では、具体的にどうすればWordPress REST API経由の情報漏洩を防げるのでしょうか?
簡単にできる対策をいくつか紹介します。
方法1:functions.phpでREST APIのユーザー情報を非公開にする
WordPressのfunctions.phpに以下のコードを追加することで、ログインしていないユーザーが「/wp-json/wp/v2/users」にアクセスするのを防ぎます。
function restrict_rest_users_endpoint($result, $server, $request) {
if (strpos($request->get_route(), '/wp/v2/users') !== false) {
if (!is_user_logged_in()) {
return new WP_Error('rest_forbidden', __('REST API access is restricted.'), array('status' => 403));
}
}
return $result;
}
add_filter('rest_pre_dispatch', 'restrict_rest_users_endpoint', 10, 3);
方法2:セキュリティプラグインを活用する
プラグインを利用することで、より簡単にREST APIの制限ができます。
おすすめのプラグイン
- 「All In One WP Security & Firewall」:不正アクセス対策全般を強化
- 「XO Security」(弊社おすすめ!)
日本製のセキュリティプラグインで、不要なREST APIの無効化、ログイン保護、コメントスパム対策などができる
軽量&シンプルな設定画面なので、初心者でも使いやすい
「/wp-json/wp/v2/users」へのアクセス制限も可能!
これらのプラグインを導入し、REST APIの設定を適切に制限しましょう。
方法3:.htaccessでREST APIのアクセスを制限
.htaccessに以下のコードを追加することで、REST APIへのアクセスを制限できます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-json/wp/v2/users [NC]
RewriteRule .* - [R=403,L]
</IfModule>
この設定を行うことで、「/wp-json/wp/v2/users」へのアクセスを禁止できます。
⚠ 設定による影響についての注意⚠
本記事で紹介した対策は、一般的なWordPress環境向けのものですが、すべてのサイトに適用できることを保証するものではありません。
テーマやプラグインの構成によっては影響が出る可能性があるため、必ずバックアップを取った上で自己責任で実施してください。
まとめ:「/wp-json/wp/v2/users」の対策を今すぐ実施しよう!
- WordPress REST APIの設定が適切でないと、ユーザー名が簡単に漏洩する可能性がある
- ユーザー名が漏れると、ブルートフォース攻撃の標的になり、不正ログインのリスクが高まる
- functions.phpの修正、プラグインの導入、.htaccessの設定などで対策を行うことが重要
「自分のサイトは大丈夫」と思っている方こそ、今すぐチェックし、適切な対策を実施してください!
「対策をしたいけれど、どうすればいいか分からない」
「他社で作ったサイトでも対応できる?」
という方も、お気軽にご相談ください。可能な範囲でセキュリティ対策を実施いたします。
大切なサイトを守るために、今すぐ対策を見直しましょう!