TT2テーマに限らず、WordPressのサイトでは、いろいろな場所でユーザーのIDやユーザー名がURL内に出力されています。
これは、ユーザーを一意に表すために必須なので、半ば仕方ないことでしょう。
ただ、何の気なしにログインしているいつもの画面で、このユーザー名やユーザーIDが使えることを不思議に思ったことありませんか?
簡単に言えば、ちょっとわかる人には、作者のユーザー名はバレてしまっているということです。管理ユーザーの表示名を「〇〇管理人」なんて表示してしまっていたら、そのユーザーが管理者権限を持つユーザーであるということも類推されてしまいます。
そうなると、残るセキュリティ要素はパスワードだけになってしまうので、非常に危険です。
よく、WordPressセキュリティの脆弱性なんてこと言われていますが、サーバー環境やWordPress本体、テーマ・プラグインの脆弱性を利用して何かを仕掛けるのは、専門知識を持った人間だけでしょうから、多くは管理ユーザーとしてログインして悪さをするという被害が多いのではないかと思います。
そこでプラグインを使って以下のような対策をされるサイトが多いと思います。
- 管理上で使うユーザー名とサイト上で見えるユーザー名を変える
- ログインURLを変える
- 多要素認証にする
ただ、これにもやはりプラグインを使う性質上、前述したような脆弱性の問題があったり、ログインが面倒だったり、プラグインに問題があった時や変更したログインURLを忘れてしまったときなどには、もうお手上げ!となってしまうかも知れません。
そこでおすすめなのが、ユーザーIDやユーザー名でのログインを無効にして、メールアドレスとパスワードでのログインに限定する方法。
本ページで紹介するコードを子テーマのfunctions.phpへ追加するだけで簡単に設定でき、トラブルが起きた時はサーバーのファイルマネージャーなどで該当のコードを削除するだけで元通りですから安心です。
本ページ掲載のコードを使用するときは
本ページで掲載しているコードは、以下に了承した上で使用ください
- コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
- コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
- コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
- コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
- 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
- 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)
ログインでユーザーIDを使えないようにするコード
機能を使うには、以下のコードを子テーマのfunctions.phpへ追加してください
functions.phpはサイトの動作を制御する大切なファイルです。スキルのない方や不安な方にこの方法はお勧めしません。また、親テーマは更新時にファイルが上書きされて元に戻ってしまうので、子テーマへのコード追加をおすすめします。
/********** ログインをメールアドレスのみにする **********/
function pwcn_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', 'pwcn_force_email_login', 20, 3);
各行にコメントアウトを入れてますが、このコードでは以下のように動作します。
- ログインフォームの「ユーザー名またはメールアドレス」に入力された値をメールアドレスとして検索
- 登録されているユーザーの中に該当するメールアドレスがあればそのユーザーのパスワードと照合してログインの検証をする
- ユーザーの中に該当するメールアドレスがなければ(ユーザー名だったりIDだったり、間違ったメールアドレスだったり)、「ユーザー名またはメールアドレス」に空の文字列を渡す(つまりログインに失敗する)
要するに、ユーザー名やID、メールアドレスでサイトに登録されているユーザーと照合する部分をメールアドレスだけにしようというものですね。
使用に際しては次項を必ず確認してください。
メールアドレスの確認と変更は必須
WordPressは、インストール時に設定したメールアドレスが、サイトのメールアドレスと最初に登録する管理ユーザーの両方に適用されるようになっています。
サイトのメールアドレスは問い合わせフォームからの通知やコメント通知など、各種サイトからの通知に利用されますので、管理ユーザーと共通のままにしておくことは、今回のカスタマイズをしなかったとしてもとても危険ですから必ず変更しましょう
管理画面から、「設定」をクリックして表示される画面のメールアドレスがサイトのメールアドレス、「ユーザー」から該当のユーザーの編集リンクをクリックして表示されるメールアドレスがユーザーのメールアドレスです。
サイトのメールアドレスは、サイトドメインと共通のドメインのメールアドレスを設定するのが望ましいですが、ユーザーのメールアドレスはどんなドメインでも構いませんから、あえて別のドメインのメールアドレスにするだけでも類推されるのを防ぐ一手になるでしょう。
コメントを残す