【完全版】WordPressの管理者IDを非公開にする方法

2017年5月22日

security

一般的に管理者IDにadminって使わない方が良いという話は有名ですが、多くのWordPressの設定では簡単に管理者のIDを簡単に調べることができてしまいます。

管理者IDの隠し方を紹介しますので、是非実施してください。

管理者IDの調べ方

WordPressのTOPのURLの後ろに ?author=1 と記入してみてください。

http://example.com/?author=1

ページが移動して、URLの中にログインに利用しているIDが出てきませんか?

http://example.com/author/xxx-admin/

このような表示になった場合は、管理者IDは xxx-admin だとバレたことになります。

ページが見つからない等で表示されない場合、数字の部分を順番に変えていって、自分のユーザの番号にたどり着いた時点で管理者用のページが表示されてしまいます。

管理者IDを隠す方法

このページで紹介する対応方法の対応状況の一覧です。

完全に対応するには、プラグインによる対策か、.htaccess と author.php の組み合わせ、functions.php と author.php の組み合わせのいずれかでの対策が必要です。

?author=1 対策 /author/xxx-admin/ 対策
functions.php
.htaccess
プラグイン
author.php

管理者IDへのアクセスを隠す方法(functions.php)

クエリパラメータに author が含まれていたら取り除いてしまう方法です。
この方法か、次に紹介する .htaccess、プラグインでの対応が

<?php
function remove_author_parameter() {
  $_GET['author'] = '';
}
add_action( 'init', 'remove_author_parameter' );

管理者IDのURLを呼び出させない方法(.htaccess)

WordPress のルートにある .htaccess の # BEGIN WordPress より前に、下記の5行を追加してください。
authorというクエリパラメータがある場合、強制的に TOPページにリダイレクトしています。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (^|&)author=.* [NC]
RewriteRule ^.*$ /? [L,R=301]
</IfModule>

飛ばしたい別のページがある場合、RewriteRule の「 – 」のところに、遷移先のURL ( /author/xxx-user/? 等 )に書き換えます。

最後の「 ? 」を忘れるとリダイレクトループが発生してしまうのでお気をつけください。

プラグイン(Edit Author Slug)を利用する方法

プラグインの設定だけでパラメータアクセスを防ぐことが出来ます。

また、/author/xxx-admin/ のようにユーザーページのURLを任意の文字列に変更できるので、

author.php での対応について

この方法だけでは、詳しい人には管理者ID、管理者名が分かってしまいます。

このページでは、元々この方法を紹介していましたが、厳密にチェックすると不完全であることが分かり、前述の対応方法を紹介するに至りました。

ただ、手軽に対応できるのと、ユーザー名で直接アクセスがあった場合に、404 や リダイレクトしてしまえるメリットがあります。

テンプレートのテーマディレクトリの中に author.php というファイルを作成して、下記の内容を記入して保存してください。

<?php
wp_redirect(home_url());
exit;

先ほどと同じように ?author=1 とつけてアクセスしたら、トップページが表示されるようになります。

別のページにリダイレクトさせたい場合、下記になります。home_url() の部分を変えることで、任意のページにリダイレクトさせることができます。

管理者IDを隠す理由

admin というIDを使ってはいけない理由と同じで、IDがバレることで攻撃者はパスワードを見つけるだけでよくなります。

パスワードを総当たりで探す場合、アルファベットの大文字小文字、数字、記号の90種類をフルに使ったパターンでも、6桁なら数秒もかからずに全パターンを網羅できてしまいます。8桁ならもう少し耐えられるのですが、記号抜きの62種類の場合、数十秒で破られてしまいます。

ただ、これはパスワードだけの場合なので、ここにIDと組み合わせる必要があればIDの文字数+パスワードの文字数の長さを総当たりで調べる必要があるので、一気に強度が高まることになります。

実際は、インターネット経由での攻撃になるので、全ての組み合わせを試すようなアクセス数がある場合、サーバ側の設定等でブロックされて簡単に総当たりでの突破はされないのですが、攻撃側の技術も進化しているため、巧みにかいくぐって攻撃を仕掛けてきます。

その他のセキュリティ対策

手っ取り早い方法としては、管理画面へのアクセスにBASIC認証やIP制限をかけてしまうことで、二重認証化してしまいましょう。

wp-login.phpへのアクセスと、wp-adminディレクトリへのアクセスに対してアクセス権限をかけることになりますが、admin-ajax.php だけはフロント画面からもアクセスがあるので、認証を外してあげる必要があります。

まとめ

セキュリティ対策はやってもやってもキリがないぐらい、攻撃者は様々な方法で攻めてきます。

管理者IDを隠す程度のことでWordPressのセキュリティを劇的に高めることはできませんが、少なくともセキュリティ意識のあるサイトだと伝わります。

玄関の鍵が2個ある家と1個しかない家のどちらに泥棒が入りやすいですか?というレベルの問題で、万能な対策というものはないので、細かい対策の積み重ねで自分のサイトを守っていきましょう。