WordPressは記事の作成者で検索できるので、「author.php」テンプレートを利用して作成者別の一覧ページが作成できます。これは便利な反面、作成者のIDがあらわになるため、WordPressのログイン名が公開されている状態となります。
これを避けるため「ユーザー名が「/?author=xx」で知られるのを防ぐには」で、author.phpを表示しない方法について掲載しました。
これで安心していたのですが、ある日隠したはずのログイン名を利用したブルートフォースアタックがログインログに登録されていました。
サイト上でログイン名が表示されないように、テンプレートをチェックしたにも関わらず情報が漏れているのです。そこで調べたところ、穴が判明しました。それは「HTTPプロトコル」の通信データにあったのです。
HTTPプロトコルを簡単に説明すると、ブラウザとWebサーバー間でデータ通信するためのデータ伝送手順です。転送データにはブラウザに表示するHTMLデータ以外に、アクセスした結果のステータスコードや日時データが、目に触れない状態でやり取りされています。
この通信データの中に、何とユーザー名が含まれていたのです。
以下の通信データは、「http://web.mt-systems.jp/?author=1」とURLを入力したときの通信データの一部です。
author.phpでリダイレクトして表示しないようにしても、こんなところでユーザー名が分かってしまう「穴 ●」があったのです。
対処方法
WordPressはユーザー名に関して3つのデータ項目があります。
- user_login
ログイン名 - user_nicename
ユーザー名 - display_name
表示名
通常ログイン名でユーザー登録するとユーザー名には、自動でログイン名が設定されます。そしてプロフィール編集で表示名は編集できますが、ログイン名とユーザー名は編集できません。
通信データで「author」名に利用されるデータは、この「user_nicename」が利用されています。ですので「user_nicename」を書き換えれば良いのです。
書き換え方法
通常の管理画面からは編集できませんが、弊社のプラグイン「MTS Login Logger」を利用すればプロフィール画面から編集することができるようになります。
その他、サーバーにあるデータベースの管理画面からデータを直接編集しても良いでしょう。
(140807)