WordPress REST API によるユーザー情報を隠す

以前「コメント欄のユーザー名を隠す」という記事を書きましたが、他にもユーザー名を知られてしまうことがあります。

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 );

プラグイン

なお、この機能をもったプラグインを公開しているので、プラグインで簡単に設定したいという方はこちらをどうぞ。

ログインログの記録やログイン試行の制限、ログインページの変更、XML-RPC の無効化、ピンバックの無効化等、 …

プラグインの設定

最後に

REST API はデフォルトで有効な状態にあり、簡単に取得されてしまいます。ユーザー名を特定されてしまうと、あとはパスワードで総当たり攻撃される可能性があるので、何かしらの対策をすることをおすすめします。

関連情報

59620 (Remove a query to /wp-json/wp/v2/users from the editor where there isn’t a real need) – WordPress Trac

追記

この記事の元々のタイトルは「WordPress REST API によるユーザー名の漏洩を防ぐ」でしたが、WordPress 的にはユーザー名をセーフティー情報と見なしていないということなので、ネガティブなイメージの「漏洩を防ぐ」から「隠す」に変更しました。

コメントを残す

メールアドレスが公開されることはありません。

日本語でコメントを入力してください。(スパム対策)