サイトアイコン IT NEWS

エックスサーバーのBasic認証でwp-adminに制限をかけてはダメ

エックスサーバーのBasic認証でwp-adminに制限をかけてはダメ

当サイトで度々推奨しているエックスサーバーですが、サーバーパネルに搭載されているアクセス制限機能に以外な落とし穴がありました。
アクセス制限とは、特定のフォルダに対してBasic認証をかけるというもの。
操作がとても簡単で、これは便利だと思い、WordPressセキュリティを向上させようと、管理画面に設定した際にトラブルが発生したお話です。
先に言っておきますが、エックスサーバーが悪いわけではありませんので、誤解のないようにお願い申し上げます

何が問題なのか?

アクセス制限


まず、管理画面のパスがWordPressの初期設定のまま(/wp-admin/)である前提で進めます。
エックスサーバーアクセス制限機能では、フォルダに対してBasic認証をかけます。
この場合だと/wp-admin/に対して設定することになります。

結果、問題なく設定されたように思いましたが、管理画面だけでなく、投稿した記事の詳細ページにもBasic認証ダイアログが表示されました。(未入力可)
ソースから原因を探してみたところ、以下の一文を発見。

・・・ https://[ドメイン]/wp-admin/admin-ajax.php ・・・

どうやら、/wp-admin/admin-ajax.phpを使っているらしく、コレのせいで表示されるようです。

特定のファイルにアクセス制限

解決策として、フォルダ制限を書けるのではなく、管理画面パスワードを入力する際に必ずアクセスするファイル「wp-login.php」のみに対してBasic認証をかけます。
ですので、エックスサーバーアクセス制限機能は使わず、独自に作成することになりますが、ヒントはもらいましょうw

アクセス制限機能を使った場合

エックスサーバーアクセス制限機能を使うと、/wp-admin/直下の.htaccessに以下の内容が追加され、

AuthUserFile "/home/path/to/htpasswd/wp-admin/.htpasswd"
AuthName "Member Site"
AuthType BASIC
require valid-user
AuthUserFile

のファイルパスに.htpasswdが生成されます。

wp-login.phpにBasic認証をかける方法

それでは、上記の内容と以下の参考サイトを基に完成させていきます。

.htpasswdはそのまま使うことにします。
まだ作ってない方はこちらからどうぞ。

ファイルを指定するには?

エックスサーバーアクセス制限機能で生成した.htaccessの内容を

<Files wp-login.php>
・・・
</Files>

で囲むだけでOK!
簡単でしたね!

完成例と説明

完成したのがこちら。

<Files wp-login.php>
AuthUserFile "/home/path/to/.htpasswd"
AuthName "Member Site"
AuthType BASIC
require valid-user
</Files>

以下、設定内容について。

AuthUserFile/home/から始まる.htpasswdまでのフルパスを指定してください。
置き場所はどこでも構いませんが、/public_html/よりも上位の階層がベターです。
AuthNameBasic認証のダイアログに表示される文字列です。
日本語は文字化けしそうなので避けましょう。
その他AuthTypeとrequireは何も考えずそのままで。

以上、これでセキュリティも強化されたはず。

モバイルバージョンを終了