【 WordPress】ユーザーIDを秘匿する方法

【 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を取得することが可能です。

koya_190802_01.jpg

こちらも無効にするためには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の秘匿は簡単に出来るセキュリティ対策のため、まずはここから対策をしましょう。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ