当サイトで度々推奨しているエックスサーバーですが、サーバーパネルに搭載されているアクセス制限機能に以外な落とし穴がありました。
アクセス制限とは、特定のフォルダに対して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/よりも上位の階層がベターです。 |
AuthName | Basic認証のダイアログに表示される文字列です。 日本語は文字化けしそうなので避けましょう。 |
その他 | AuthTypeとrequireは何も考えずそのままで。 |
以上、これでセキュリティも強化されたはず。
- Original:https://minory.org/xserver-htpasswd.html
- Source:Minory
- Author:管理者