【 WordPress】ユーザーIDを秘匿する方法
こんにちは。koyaです。
ちょっと前までスケボーにハマって毎日のように練習に行っていましたが、最近は暑すぎて引きこもりがちです。
OculusQuestがOculusGoのアプリに対応するらしく期待して待っています。
今回はWordPressのセキュリティ対策の中でも、ユーザーID関係の対策についてご紹介します。
何故ユーザーIDが大事なのか
WordPressは初期設定だとURLの最後に/wp-admin
と入力するだけでログイン画面へ遷移することができます。
ログイン画面で求められるものがユーザーIDとパスワードのみのため、ユーザーIDが発覚すると残る砦がパスワードだけになってしまいます。
パスワードだけではリスト攻撃されてしまうのでユーザーIDを秘匿することは重要です。
ではどのようにして秘匿すれば良いのでしょうか。
管理者IDを非公開にする。
WordPressは初期状態だとhttp://example/?author=1
のようにURLにパラメータをつけるとhttp://example/author/admin/
のようにURLが変化して管理者IDが発覚します。
この場合ユーザーIDはadmin
ということがわかります。
これを防ぐためにはfunctions.phpとauthor.phpを書き換えるかプラグインを導入する必要があります。
functions.php
<?php
function remove_author_parameter() {
$_GET['author'] = '';
}
add_action( 'init', 'remove_author_parameter' );
author.php
<?php
wp_redirect(home_url());
exit;
author.phpはデフォルトでは存在しないため、functions.phpやheader.phpと同階層に新規ファイルを追加しましょう。
REST APIでのユーザーID取得を無効化する
上記と似たような手法ですが、URLの最後に/wp-json/wp/v2/users
を追加することで下記の画像のようにユーザーIDを取得することが可能です。
こちらも無効にするためにはfunctions.phpを編集します。
<?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[\d]+)'] ) ) {
unset( $endpoints['/wp/v2/users/(?P[\d]+)'] );
}
return $endpoints;
}
add_filter( 'rest_endpoints', 'my_filter_rest_endpoints', 10, 1 );
上記のコードを追加することでユーザー情報を秘匿することが可能です。
まとめ
WordPressは世界一使われているCMSのため攻撃される可能性は非常に高いです。
ユーザーIDの秘匿は簡単に出来るセキュリティ対策のため、まずはここから対策をしましょう。