WordPressでは作者一覧ページが自動で生成されるようになっているのはご存じですね。
例えば本サイトであればこちらのページがそうです。
ではこれとは別にトップページのURLに「?author=ID」(IDの部分はユーザーID)を付けてアクセスすると、そのIDを持つユーザーが存在する場合に作者ページへ遷移されるのをご存じでしょうか?
本ページにたどり着いた方ならご存じかと思いますが、この作者ページにはユーザー名が含まれていますし、またWordPressインストール時に設定する最初の管理ユーザーのIDは1なので、「?author=1」へアクセスすれば、簡単に管理ユーザーのユーザー名が分かってしまいます(実際にこの手法でユーザー名を収集して不正ログインを試みる事例があるようです)。
これを防ぐには、最初に作成した管理ユーザーとは別の管理ユーザーを作って類推されにくくするのが妥当ではあるものの、ID番号が分からないほどのユーザーを作成して、そのうちの一人を管理ユーザーにするということをしない限り、ID=1.2.3….と当たっていけばすぐに判明してしまいますし、何より最初の管理ユーザーでたくさんのコンテンツを作成してしまっている場合には移行も大変ですから現実的ではありません。
そこで本ページでは、「?author=ID」でアクセスがあった場合にすべて404ページへ遷移させるためのコードを紹介します。
WordPress不正ログイン対策の一助になれば幸いです。
「?author=ID」パラメーターでの作者ページアクセスを404ページへ遷移させるコード
まずはコード追加前に自身のサイトでトップページ+「/?author=1」(1は実際の管理ユーザーのIDにしてください)でアクセスしてみてください。
もしもWordPress標準の動作通り、サイトのトップページ+「/author/ユーザー名」のページへ遷移されるようでしたら、以下のコードを有効化しているテーマのfunctions.phpへ追加します。
function pwcn_author_archive_id_parameter_access_to_404( $query ) {
// 管理画面外(フロントエンド)かつメインクエリの場合のみ処理
if ( ! is_admin() && $query->is_main_query() ) {
// クエリ変数 'author' に値がセットされているかチェック
// これは /?author=ID の形式のアクセスを捉えます
if ( ! empty( $_GET['author'] ) ) {
$author_id = absint( $_GET['author'] );
if ( $author_id > 0 ) {
// 1. クエリを「存在しないクエリ」として強制的に設定
$query->set_404();
// 2. /author/username/ へのリダイレクト処理(Canonical Redirection)を停止
// IDからユーザー名へのリダイレクトを防ぐための最重要措置
remove_action( 'template_redirect', 'redirect_canonical' );
// 3. 404ヘッダーを設定し、テーマの404テンプレートをロードさせる
status_header( 404 );
}
}
}
}
add_action( 'pre_get_posts', 'pwcn_author_archive_id_parameter_access_to_404' );
追加したら、もう一度「/?author=1」へアクセスしてみてください。404ページが表示されれば機能の追加は完了です。










コメントを残す