ブログのアクセスログに「?author=1」という文字列が付いているのを時々見かけるんですけど、これってなんでしょうか。
機能としては、あるユーザーが投稿した記事を一覧表示するためのものですが、個人的には不正アクセスの準備段階という見方もできると思っています。
そもそもどういった機能なの?
ブログURLの末尾に「author=x」(xはユーザーID)というクエリパラメータを付与することでそのユーザーが投稿した記事の一覧を表示するものです。
「投稿者アーカイブ」という機能です。
テーマによってはユーザー情報のウィジェットでユーザー名のリンクに自動的に設定される場合があるようです。
どうしてそのURLでアクセスしてくるの?
普通に画面上の項目をクリックして遷移してきたのであれば問題はないのですが、意図的(もしくは機械的)にアクセスしてくるケースが個人的には多いように思います。
「https://{ブログのURL}/?author=1」と入力してアクセスした場合、下の画像のようになります。
上の方に表示されている「ニックネーム」の部分が、設定によってはWordPressにログインする際のユーザー名になります。
また、テーマによっては「{ブログのURL}/author/{ユーザー名}」というURLにリダイレクトする場合があり、その場合はユーザー名そのものズバリがURLとして表示されてしまいます。
良からぬことを考えている人にとっては投稿者アーカイブのページは不正ログインする時に必要となる情報が載っているお宝ページとなるわけです。
ユーザー名を知られてしまった!
対策するには
ユーザー名を表示しないようにするには下記の方法があります。
表示名の変更
一番簡単なのはニックネームを設定して表示名を変えてしまうことです。
ニックネームを設定後、「ブログ上の表示名」の部分のリストボックスでそれを選んで「プロフィールを更新」で完了です。
セキュリティ系プラグインの導入
前述の通りテーマによってはURLとして表示されたり、ヘッダー情報にユーザー名が含まれてしまうことがあるようです。
そのため上記の方法に加えて、セキュリティ系のプラグインを導入することも検討した方がよろしいかと思います。
私が使っている「Wordfence Security」というプラグインには下の画像のような設定項目があります。
これを有効にすることでページが見つからなかったとき用の画面に遷移するようになります。
プログラムの修正
多少強引ではありますが、クエリパラメータにauthorがあった場合、もしくはURLにauthorが含まれていた場合にトップページを表示するように下記のコードをfunction.phpに追加します。
(子テーマのfunction.phpに追加します)
function ignore_author_archive()
{
if ($_GET['author'] || preg_match('/\/author\/.+/', $_SERVER['REQUEST_URI'])) {
wp_redirect(home_url('/'));
exit;
}
}
add_action('init', 'ignore_author_archive');
パスワードの複雑化と多要素認証の追加
投稿者アーカイブの機能を使いたい場合はプラグインやプログラムの修正で機能そのものを無効にすることはできません。
パスワードを複雑なものにする、多要素認証を追加する、といったセキュリティ上の対策を行うことになります。
まとめ
ユーザー名を知られたとしてもパスワードを適切に設定してあればそう簡単にログインできるものではないです。
簡単なパスワードにしている場合はすぐに変更して、必要に応じて上記の対策を取れば不正アクセスは防げると思います。
この記事が参考になれば幸いです。
コメント