TT2テーマに限らず、WordPressのサイトでは、いろいろな場所でユーザーのIDやユーザー名がURL内に出力されています。

これは、ユーザーを一意に表すために必須なので、半ば仕方ないことでしょう。

ただ、何の気なしにログインしているいつもの画面で、このユーザー名やユーザーIDが使えることを不思議に思ったことありませんか?

簡単に言えば、ちょっとわかる人には、作者のユーザー名はバレてしまっているということです。管理ユーザーの表示名を「〇〇管理人」なんて表示してしまっていたら、そのユーザーが管理者権限を持つユーザーであるということも類推されてしまいます。

そうなると、残るセキュリティ要素はパスワードだけになってしまうので、非常に危険です。

よく、WordPressセキュリティの脆弱性なんてこと言われていますが、サーバー環境やWordPress本体、テーマ・プラグインの脆弱性を利用して何かを仕掛けるのは、専門知識を持った人間だけでしょうから、多くは管理ユーザーとしてログインして悪さをするという被害が多いのではないかと思います。

そこでプラグインを使って以下のような対策をされるサイトが多いと思います。

  • 管理上で使うユーザー名とサイト上で見えるユーザー名を変える
  • ログインURLを変える
  • 多要素認証にする

ただ、これにもやはりプラグインを使う性質上、前述したような脆弱性の問題があったり、ログインが面倒だったり、プラグインに問題があった時や変更したログインURLを忘れてしまったときなどには、もうお手上げ!となってしまうかも知れません。

そこでおすすめなのが、ユーザーIDやユーザー名でのログインを無効にして、メールアドレスとパスワードでのログインに限定する方法。

本ページで紹介するコードを子テーマのfunctions.phpへ追加するだけで簡単に設定でき、トラブルが起きた時はサーバーのファイルマネージャーなどで該当のコードを削除するだけで元通りですから安心です。

ログインでユーザーIDを使えないようにするコード

機能を使うには、以下のコードを子テーマのfunctions.phpへ追加してください

functions.phpはサイトの動作を制御する大切なファイルです。スキルのない方や不安な方にこの方法はお勧めしません。また、親テーマは更新時にファイルが上書きされて元に戻ってしまうので、子テーマへのコード追加をおすすめします。

/********** ログインをメールアドレスのみにする **********/
function sample_force_email_login( $user, $username, $password ) {
//「ユーザー名またはメールアドレス」に入力された情報を email情報 としてユーザー検索
$user_data = get_user_by( 'email', $username );

if( !empty( $user_data ) ) {
//email情報からユーザーが見つかればログイン認証用の関数にデータを渡す
return wp_authenticate_username_password( null, $user_data->user_login, $password );
}
//emailでユーザー取得できなかった場合
return wp_authenticate_username_password( null, '___', $password );

}
add_filter('authenticate', 'sample_force_email_login', 20, 3);

各行にコメントアウトを入れてますが、このコードでは以下のように動作します。

  1. ログインフォームの「ユーザー名またはメールアドレス」に入力された値をメールアドレスとして検索
  2. 登録されているユーザーの中に該当するメールアドレスがあればそのユーザーのパスワードと照合してログインの検証をする
  3. ユーザーの中に該当するメールアドレスがなければ(ユーザー名だったりIDだったり、間違ったメールアドレスだったり)、「ユーザー名またはメールアドレス」に空の文字列を渡す(つまりログインに失敗する)

要するに、ユーザー名やID、メールアドレスでサイトに登録されているユーザーと照合する部分をメールアドレスだけにしようというものですね。

使用に際しては次項を必ず確認してください。

メールアドレスの確認と変更は必須

WordPressは、インストール時に設定したメールアドレスが、サイトのメールアドレスと最初に登録する管理ユーザーの両方に適用されるようになっています。

サイトのメールアドレスは問い合わせフォームからの通知やコメント通知など、各種サイトからの通知に利用されますので、管理ユーザーと共通のままにしておくことは、今回のカスタマイズをしなかったとしてもとても危険ですから必ず変更しましょう

管理画面から、「設定」をクリックして表示される画面のメールアドレスがサイトのメールアドレス、「ユーザー」から該当のユーザーの編集リンクをクリックして表示されるメールアドレスがユーザーのメールアドレスです。

サイトのメールアドレスは、サイトドメインと共通のドメインのメールアドレスを設定するのが望ましいですが、ユーザーのメールアドレスはどんなドメインでも構いませんから、あえて別のドメインのメールアドレスにするだけでも類推されるのを防ぐ一手になるでしょう。