WordPressで投稿者アーカイブを非表示して「?author=1」でユーザー名を抜き取られないようにする方法
投稿日:2017年07月11日
最終更新日:
もくじ
- 投稿者アーカイブの無効化手順
- 投稿者アーカイブを有効化する危険性
- 無効化出来る理屈
投稿者アーカイブの無効化手順
使用しているテーマの「functions.php」に、以下のコードを追加してください。
[PHP] add_filter( ‘author_rewrite_rules’, ‘__return_empty_array’ ); function disable_author_url(){ if($_GET[‘author’] || strpos($_SERVER[‘REQUEST_URI’], ‘/author/’) !== false){ wp_redirect(home_url()); exit; } } add_action(‘init’, ‘disable_author_url’); [/PHP]サーバー上のfunctions.phpにこの変更を反映したら、パーマリンク設定画面で「変更を保存」ボタンを押しましょう。
この操作をしないと、変更が反映されません。
この操作を行うことで投稿者アーカイブは無効化され、後述するセキュリティホールも塞がれます。
投稿者アーカイブを有効化する危険性
投稿者アーカイブが有効なままだと、WordPressの管理者ユーザー名が比較的簡単にバレてしまう恐れがあります。WordPressでブログ等を運営している方は、以下のURLを打ち込んでみてください。 [VIM] http://(自分のサイトのURL)/?author=1 [/VIM]
特に対策を施していない場合、上記のURLにアクセスすると、URLの「/author/」の後ろにWordPressのユーザー名がそのまま表示されます。ユーザー名がバレたらパスワードの総当たり攻撃でWordPressをハッキングされてしまう危険性が一気に跳ね上がるので、このセキュリティホールはきちんと塞がねばなりません。
無効化出来る理屈
今回は、先述したコードで投稿者アーカイブを無効化し、ユーザー名を抜き取られないように出来る理屈についても触れたいと思います。
[PHP] add_filter( ‘author_rewrite_rules’, ‘__return_empty_array’ ); [/PHP]1行目のコレは、「投稿者アーカイブの無効化」に関わる部分です。このコードによって投稿者アーカイブに関するリライトルール(WordPressにおけるURLを生成するルール)を空っぽにしてしまい、投稿者アーカイブを表示できなくしてしまいます。
function disable_author_url(){ if($_GET[‘author’] || strpos($_SERVER[‘REQUEST_URI’], ‘/author/’) !== false){ wp_redirect(home_url()); exit; } }この関数は、「GETリクエストのパラメータに『author』が入っている or URLに『/author/』が入っている 場合はサイトのTOPページにリダイレクトして処理を強制終了」するものです。コレによって先述したURLへのアクセスが有っても強制的にTOPページへ飛ばすことが出来、ユーザー名バレを防ぎます。但し、この関数をfunctions.phpに書くだけでは動作しません。
[PHP] add_action(‘init’, ‘disable_author_url’); [/PHP]最後の1行は、WEBサイトの任意のページが読み込まれた時にdisable_author_url関数を実行させるためのものです。これにより、例のURLにアクセスが有った時にdisable_author_url関数の働きでTOPページへの強制転送を行い、ユーザー名バレを防ぎます。
参考リンク