WordPressのユーザ名の漏洩を防ぐ

Wordpress

いきさつ

WordPressのユーザ名(author)は大事な情報のひとつである。ユーザ名やパスワードが流出してしまうとブログが乗っ取られてしまうリスクがある。

基本的にWordpressの投稿者名は “ユーザ名” ではなく “ニックネーム” を表示するように設定している。しかし、パラメータ “?author=XX” を付けてWebページにアクセスされるとWordpressによってリダイレクトが行なわれてユーザ名が表に出てきてしまう。

これを防ぐには、テーマの “functions.php” を編集する方法とプラグインを入れる方法があるみたいだが、今回は前者のやり方を紹介する。

ユーザ名が表に出てくるとは

ブラウザのアドレスバーに “<サイト名>/?author=1” のように入力すると、次のようなページが表示される。これはauthorのIDが1のユーザ(ここではニックネームtaro)の記事一覧を表示するページになる。

クリックで拡大

ここでアドレスバーに注目してみると、”<サイト名>/?author=1″ から “<サイト名>/author/admin” に変化している。ここではユーザ名 “admin” のニックネームを “taro” に設定しているので、”taro” のユーザ名が(リダイレクト後の)アドレスバーから分かってしまうことになる。

クリックで拡大

ダッシュボードでユーザ名adminの表示設定をニックネームにしていても、アドレスバーにはユーザ名が表示される。

クリックで拡大

functions.phpで防ぐ

authorのパラメータが来たときにWordpressはリダイレクトしようとするので、”functions.php” でこのリダイレクト処理を上書きすることで別のページ(トップページ)に強制的に飛ばしてユーザ名が表示されることを防ぐ。

“functions.php” のどこかに次のコードを書く。

function redirect_author_query() {
  if (preg_match('/author=([0-9]+)/i', $_SERVER['QUERY_STRING'])){
    wp_redirect(home_url());
    exit;
  }
}
add_action('init', 'redirect_author_query');

【補足】
クエリ文字列に “author=数字” があったらトップページにリダイレクトする処理をinitアクションフックに追加する。

参考ページ

コメント

タイトルとURLをコピーしました