wordpress ユーザー名の流出を防ぐ(プラグインなし)

ユーザ名が狙われている 技術ネタ

アクセスログを見たら、

"GET /?author=1 HTTP/1.1" 301
"GET /author/hoge/ HTTP/1.1" 200

このようなものがあり、これは何だろう?と思い「?author=1」でググってみると、WordPressの機能としてユーザ名が知られてしまう問題があると判明しました。



対策

ググると、この問題の対応方法はたくさんでてきます。
当ページでは、プラグイン(Edit Author Slug)ではなく、PHPコードを書く方法 で対応しました。
具体的には以下のコードを functions.php に書きました。

function author_archive_redirect() {
    if(is_author()) {
        wp_redirect(home_url());
        exit;
    }
}
add_action( 'template_redirect', 'author_archive_redirect' );

きちんとトップページにリダイレクトされ、アクセスログからもauthorページへのアクセスが無いことも確認済みです。

注意点

以下のように author.php で対処するやり方を説明しているサイトもありました。

wp_redirect(home_url());
exit();

当サイトでも、最初はこのコードで対処しました。
確かに、「?author=1」でページにアクセスするとトップページにリダイレクトされ、一見、正しく対処されているように見えますが、アクセスログを見ると以下のよう記録がありました。

"GET /?author=1 HTTP/1.1" 301
"GET /author/hoge/ HTTP/1.1" 302
"GET / HTTP/1.1" 200

この通り、一度authorページに遷移した後にトップページにリダイレクトされているため、結局の所、相手にはユーザ名が伝わっていることになります。
もし、author.php の修正で対応している人がいたらご注意ください。