いきさつ
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アクションフックに追加する。
コメント