WordPressの管理画面にアクセス制限をかける方法

2017年5月28日

WordPress

WordPressの管理画面にBASIC認証をかけるのは、簡単かつ効果の高いセキュリティ対策の一つです。

ただし、対応方法を間違うと意図していない画面で認証が必要になったり、かかっているはずの認証がかかっていないという状態になってしまいます。

WordPressの管理画面とセキュリティ対策

WordPressのセキュリティ対策

WordPressのセキュリティ対策は数多くありますが、最新バージョンへの更新と管理画面へのログインIDとパスワードを複雑なものにしておくことは手軽にできる対策です。

それ以上は、セキュリティ対策用のプラグインを追加していくような対策が多いのですが、プラグイン自体のセキュリティ問題やパフォーマンスの影響を考えると、気軽にこれがオススメとは言い難いものが多いです。例えば、Crazy Bone(狂骨)というログイン履歴を取得するプラグイン自体にXSSの脆弱性があったという恐ろしい話もあります。(現在は修正されています)

しかし、管理画面にアクセス制限を追加する方法は、プラグインに頼らず、パフォーマンスへの影響はないに等しく、間違いなくオススメできる方法になります。

アクセス制限の方法の決め方

会社のような固定IP環境からしかアクセスしない場合は、IP制限をかけるのが効果的です。しかし、自宅やモバイル環境からアクセスする場合は、IP制限をかけることができません。そのため、代わりにBASIC認証をかけることでセキュリティ対策を行います。

アクセス認証をかける対象

WordPressの管理画面にアクセス制限を行う場合、以下のファイル・ディレクトリを対象にします。

  • wp-login.php
  • admin-ajax.php以外の wp-admin ディレクトリ

wp-login.phpはログインページです。このファイルにだけ認証をかけても、認証が正しくかかっているように見えますが、管理画面本体に認証がかからないため、wp-adminディレクトリにも認証をかける必要があります。

ただし、admin-ajax.phpは管理画面以外のフロント画面でも利用されているため、認証がかからないようにしておく必要があります。

アクセス制限のかけ方

レンタルサーバで広く利用されている.htaccess(Apache)の場合の設定方法です。

wp-login.phpへの認証

wp-login.phpと同じディレクトリの.htaccessに下記のコードを追加します。

.htaccessはWordPress自体のファイルに追記することになるので、他の内容に影響しないように、一番先頭か一番末尾に追記することをお勧めします。

BASIC認証

<Files wp-login.php>
AuthType Basic
AuthUserFile /var/www/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
require valid-user
</Files>

.htpasswdの作成方法は省略しますが、/var/www/.htpasswd の部分は、実際の.htpasswdのファイルのパスに変更してください。
FTPツールなどで表示されているパスはアクセス可能な部分のみ表示されていることもあるため注意してください。

IP制限

<Files wp-login.php>
Order deny,allow
Deny from all
Allow from 111.111.111.111
</Files>

111.111.111.111 の部分を許可するIPに変更してください。
複数のIPを許可する場合、Allow from の行を列挙していきます。

admin-ajax.php以外の wp-admin ディレクトリへの認証

/wp-admin/ に .htaccess を設置します。こちらは、新規でファイル作成することになります。
Windows環境では . で始まるファイルは作成できないので、別名で作成してアップロード後にリネームするか、最初からサーバ上で作成する必要があります。

BASIC認証

AuthType Basic
AuthUserFile /var/www/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
Require valid-user
<FilesMatch "(admin-ajax.php)$">
    Satisfy Any
    Order allow,deny
    Allow from all
    Deny from none
</FilesMatch>

こちらも、/var/www/.htpasswd の部分は、実際の.htpasswdのファイルのパスに変更してください。

IP制限

Order deny,allow
Deny from all
Allow from 111.111.111.111
<FilesMatch "(admin-ajax.php)$">
    Satisfy Any
    Order allow,deny
    Allow from all
    Deny from none
</FilesMatch>

こちらも、111.111.111.111 の部分を許可するIPに変更してください。

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


管理者のまとめページを使わない場合、管理者IDがバレないように対策をしておきましょう。

たった3行のコードを書いたファイルを置くだけで終わりなので、お手軽です!

まとめ

WordPressの管理画面にアクセス制限をかける方法は手軽にできて、セキュリティ面でも大きな効果があります。

様々なセキュリティ関連のプラグインがありますが、それらを設定する前にまずは管理画面のアクセス制限を行いましょう。

その後、要件にあったプラグインを追加して自分のサイトを守っていきましょう!