以前「コメント欄のユーザー名を隠す」という記事を書きましたが、他にもユーザー名を知られてしまうことがあります。
WordPress 4.4 より導入された REST API によるものです。
ブラウザより、ご自身のサイトの URL の末尾に「/wp-json/wp/v2/users」や「?rest_route=/wp/v2/users」を付加したアドレスでアクセスしてみてください。
(サイトアドレス)/wp-json/wp/v2/users
または、
(サイトアドレス)/?rest_route=/wp/v2/users
どうでしょうか、表示されたデータの中にユーザー名が含まれていませんか?
表示されるデータは、REST API で取得したユーザーのデータです。Firefox では下記のように表示されます。
REST API の特定のエンドポイントを無効化
ユーザー名を取得されてしまう可能性のある、REST API のエンドポイントは下記のものがあります。
/wp/v2/users
/wp/v2/users/(?P<id>[\d]+)
下記のコードをテーマの functions.php に追加することで、上記のエンドポイントを無効化することができます。
function my_filter_rest_endpoints( $endpoints ) {
if ( isset( $endpoints['/wp/v2/users'] ) ) {
unset( $endpoints['/wp/v2/users'] );
}
if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
}
return $endpoints;
}
add_filter( 'rest_endpoints', 'my_filter_rest_endpoints', 10, 1 );
プラグイン
なお、この機能をもったプラグインを公開しているので、プラグインで簡単に設定したいという方はこちらをどうぞ。
プラグインの設定
最後に
REST API はデフォルトで有効な状態にあり、簡単に取得されてしまいます。ユーザー名を特定されてしまうと、あとはパスワードで総当たり攻撃される可能性があるので、何かしらの対策をすることをおすすめします。
関連情報
追記
この記事の元々のタイトルは「WordPress REST API によるユーザー名の漏洩を防ぐ」でしたが、WordPress 的にはユーザー名をセーフティー情報と見なしていないということなので、ネガティブなイメージの「漏洩を防ぐ」から「隠す」に変更しました。