WordPressは記事の作成者で検索できるので、「author.php」テンプレートを利用して作成者別の一覧ページが作成できます。これは便利な反面、作成者のIDがあらわになるため、WordPressのログイン名が公開されている状態となります。

これを避けるため「ユーザー名が「/?author=xx」で知られるのを防ぐには」で、author.phpを表示しない方法について掲載しました。

これで安心していたのですが、ある日隠したはずのログイン名を利用したブルートフォースアタックがログインログに登録されていました。

サイト上でログイン名が表示されないように、テンプレートをチェックしたにも関わらず情報が漏れているのです。そこで調べたところ、穴が判明しました。それは「HTTPプロトコル」の通信データにあったのです。

HTTPプロトコルを簡単に説明すると、ブラウザとWebサーバー間でデータ通信するためのデータ伝送手順です。転送データにはブラウザに表示するHTMLデータ以外に、アクセスした結果のステータスコードや日時データが、目に触れない状態でやり取りされています。

この通信データの中に、何とユーザー名が含まれていたのです。

以下の通信データは、「http://web.mt-systems.jp/?author=1」とURLを入力したときの通信データの一部です。

?author=1の通信データ

author.phpでリダイレクトして表示しないようにしても、こんなところでユーザー名が分かってしまう「穴 ●」があったのです。

対処方法

WordPressはユーザー名に関して3つのデータ項目があります。

  • user_login
    ログイン名
  • user_nicename
    ユーザー名
  • display_name
    表示名

通常ログイン名でユーザー登録するとユーザー名には、自動でログイン名が設定されます。そしてプロフィール編集で表示名は編集できますが、ログイン名とユーザー名は編集できません。

通信データで「author」名に利用されるデータは、この「user_nicename」が利用されています。ですので「user_nicename」を書き換えれば良いのです。

書き換え方法

通常の管理画面からは編集できませんが、弊社のプラグイン「MTS Login Logger」を利用すればプロフィール画面から編集することができるようになります。

その他、サーバーにあるデータベースの管理画面からデータを直接編集しても良いでしょう。

(140807)