WordPressのセキュリティ対策にBasic認証があります。簡単にセキュリティを強化できて便利ですよね。
最も簡単なのはwp-adminディレクトリを対象にBasic認証を指定して、管理画面の全てを範囲指定するパターンです。
がっ、この方法では希望する結果になりません。残念ですがメイン画面へのアクセス時もBasic認証を要求されます。
こうなってしまうと無関係なユーザーにもBasic認証を要求してしまい、使い勝手の悪いサイトが爆誕します。
この場合の対処を解説するので、そうなってる人は参考にしてください。なお、プラグインは使いません。
原因
これはwp-adminディレクトリ配下のadmin-ajax.phpがメイン画面のアクセスでも利用されるからです。
加えてBasic認証は一般的にブラウザを閉じるまで有効なため、1回でもログインすると以降はログイン要求は出ません。
このため常に管理画面からアクセスする人は一生気づきません。
よく気づいたね。
どっかのASPを申請した時にアクセスにパスワード要求されるって教えてくれた。
対策
結論として、ファイル単位の有効/無効を設定する必要があり、サーバーの簡単機能では対応できない場合があります。
ここではエックスサーバーを例にしますが、エックスサーバーはディレクトリ単位でしか制御できません。
このように設定範囲がディレクトリの場合、サーバーのポチポチ機能で解決するのは無理です。
.htaccessを修正する
どういう手法でもいいので.htaccessと呼ばれるファイルを修正します。エックスサーバーならサーバーの簡単機能で編集できます。
ただし、このファイルの操作自体が初心者向けではありません。軽い気持ちで編集するとサイトが死にます。
具体的な修正方法は2つあります。
1つ目はwp-adminディレクトリの配下を全て制限(サーバー簡単機能を利用)しながら、admin-ajax.phpを対象から除外します。
除外するためには次の記述を.htaccessに追加します。上から順番に処理されるので下の方に書いてください。
<FilesMatch "(admin-ajax\.php)$">
Satisfy Any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>
理想はBasic認証に関する設定に続けて書きます。こんな感じの内容があったら、その次に書きます。
AuthUserFile "..."
AuthName "Private"
AuthType BASIC
require valid-user
正直、どの辺に書くかはサイトの設定によって変わる。
2つ目はwp-login.phpのみをBasic認証の対象にする方法です。これを.htaccessに記述します。
<Files wp-login.php>
AuthUserFile "{.htpasswdのフルパス}"
AuthName "Private"
AuthType BASIC
require valid-user
</Files>
こっちのほうが楽です。管理画面はwp-login.phpを経由するよねってことで、入口だけ鍵かけてるイメージ。
また、.htpasswdとはBasic認証の情報(ユーザー名とパスワード)が記述されたファイルです。
自分で作成してもOKですが、サーバーのポチポチ機能で作ったファイルを参照したほうが楽です。
Tipsエックスサーバーの場合は/home/{ServerID}/{ドメイン名}/htpasswd/.htpasswdにあります。
あとがき
Basic認証はブルートフォースアタックに弱いと言われますが、使わないよりは使ったほうがマシです。
後は、ありえないくらい長いユーザー名とパスワードにして、それをパスワード管理ツールで管理すればOK。
はっきり言って人間が記憶できる程度のパスワードだと無意味です。
キーワードみたいな意味ある文字列も避けたほうがいいよ。
この記事は参考になりましたか?
コメント