WordPress REST API によるユーザー名の漏洩を防ぐ

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

WordPress 4.4 より導入された REST API によるものです。

ブラウザより、ご自身のサイトの URL の末尾に「/wp-json/wp/v2/users」を付加したアドレスでアクセスしてみてください。

(サイトアドレス)/wp-json/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 はデフォルトで有効な状態にあり、簡単に取得されてしまいます。ユーザー名を特定されてしまうと、あとはパスワードで総当たり攻撃される可能性があるので、何かしらの対策をすることをおすすめします。

コメントを残す

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

日本語でコメントを入力してください。