個人でWordPressのブログやサイトを作っている場合、記事を作成する人(投稿者)って一人の事が多いですよね?
でも、その1人の投稿者によって作られた記事すべてが羅列された記事一覧ページが自動的に作られている事はご存知でしたか?
しかも、その自動的に作られた記事一覧ページは、何も対策をしていなければ以下のような形式になっているんです。
ページタイトル = ログインID名、もしくは(設定していれば)ハンドルネーム
ページURL = http://example.com/auther/ログインID/
ちなみに、「http://example.com/?author=1」というふうに入力してアクセスすると(example.comには運営サイトのURLを入れる)、自動的に上記の記事一覧ページに転送されるので試してみてください。
これはつまり、自分のWordPressサイトだけではなく、他者のWordPressサイトに対しても同様に、ログインIDが記載されたURLにアクセスできるということです。
言い換えると、他者のWordPressサイトのログインIDは、対策していなければ割と簡単に分かってしまうって事です(^^A
ということで、この自動生成の記事一覧ページは以下のような問題をもっていると考えます。
- ログインIDが第三者にばれる
- 未選別の全投稿記事一覧が表示されるだけの無価値なページが出来上がってしまう
(投稿者がデフォルトの1人のみの場合)
まあ、IDがバレても、パスワードさえしっかりしていれば問題は少ないとは思うのだけど、ブルートフォースアタックを受ける可能性が上がっちゃう事も考えられるので、やっぱりなんか気持ち悪いですよね。。。
てことで、このページの削除。もしくは他ページへの転送ができないものかと、色々調べたり考えたりしてみたのでその成果物を共有したいと思います。
スポンサーリンク
function.phpで記事一覧ページ(authorページ)を削除する方法
色々調べてみたところ、以下2つの方法の片方か両方を実行することで解決する事が分かりました。
1.記事一覧ページを404にする方法
まず、以下をfunction.phpの任意の箇所に書き入れます。
(function.phpは、通常「wp-content/themes/テーマ名/」の中にあります)
add_filter('author_rewrite_rules','__return_empty_array');
そして、WPの管理画面から「設定 → パーマリンク設定 → 変更を保存」とします。
これで上記URLにアクセスしても404エラー(「ページが見つかりません」というページ)になり、検索エンジン上は見えなくなるので、無価値なページがインデックスされるのを防ぐ事ができます。
ただし上述のように、URLに「?author=1
」を付けてアクセスする事で、記事一覧ページ自体にはアクセスできちゃう事があるので(テーマや環境によって異なるっぽい)、これだけではログインIDを保護する事ができない場合があります。
2.記事一覧ページに転送させない方法
なので、それも防ぎたい場合は、先程の作業に加え、function.phpに以下どちらかを書き入れてください。
1 2 3 4 |
function remove_authorid(){ $_GET['author'] = ''; } add_action('init','remove_authorid'); |
もしくは
1 2 3 4 5 6 7 8 |
function remove_authorid(){ if($_GET["author"]){ header("HTTP/1.0 404 Not Found"); include '404.php'; exit; } } add_action('init','remove_authorid'); |
で、ばっちり解決!
これで、検索エンジンにインデックスされないし、「?author=1
」の方法でアクセスもできません。
.htaccessで記事一覧ページ(authorページ)を転送する方法
ちなみに、ずっと問題にしてきた自動生成される記事一覧ページですが、
歴史があるサイトで、長い間それが放置されていると、若干程度PVがあったりします。
このブログがそうでしたw
ただ、titleがずっと(勝手に)ハンドルネームの「シンゴロウ」になっていたので、それで検索をかけてきた人のみが訪問している状態でした。
なので、もちろんユーザーが求めている内容ではないし、離脱率も高ったですわけです(^^A
ということで、対策としてプロフィールページ(http://example.com/profile/)を新たに作り、そこへ301転送(指定URLに移転した事を伝える転送)をする事にしました。
以下、私が用いたその方法です。
function.phpではちょっと面倒くさそうだったので、.htaccessで行ないました。
「?author=1
」系アクセスは404に。記事一覧ページへのアクセスは指定URLに301転送させる方法をとりました。
1 2 3 4 |
RewriteEngine On RewriteCond %{QUERY_STRING} author=[0-9]+$ RewriteRule ^.*$ - [R=404,L] RewriteRule author/ログインID/ http://example.com/profile/ [R=301,L] |
まとめ
とりあえず言いたかった事は、
自動で生成される記事一覧ページ(authorページや著者ページとも言われる)には、「ログインIDの漏洩」と「価値の低いページができる」というリスクがある、ということです。
そしてその対策として、この記事では、
function.phpを用いて削除ならびにアクセス不可にする
方法と、
.htaccessを用いて削除ならびに任意のページに転送する
方法を紹介しました。
以上♪
コメント