管理画面(wp-admin)にBasic認証を設定する場合の注意

[WordPress] 管理画面(wp-admin)にBasic認証を設定する場合の注意

※ 当サイトは広告を含みます。

WordPressのセキュリティ対策にBasic認証があります。簡単にセキュリティを強化できて便利ですよね。

最も簡単なのはwp-adminディレクトリを対象にBasic認証を指定して、管理画面の全てを範囲指定するパターンです。
がっ、この方法では希望する結果になりません。残念ですがメイン画面へのアクセス時もBasic認証を要求されます。

こうなってしまうと無関係なユーザーにもBasic認証を要求してしまい、使い勝手の悪いサイトが爆誕します。
この場合の対処を解説するので、そうなってる人は参考にしてください。なお、プラグインは使いません。

Basic認証

原因

これはwp-adminディレクトリ配下admin-ajax.phpがメイン画面のアクセスでも利用されるからです。
加えてBasic認証は一般的にブラウザを閉じるまで有効なため、1回でもログインすると以降はログイン要求は出ません。

管理人
管理人

このため常に管理画面からアクセスする人は一生気づきません。

りさ
りさ

よく気づいたね。

管理人
管理人

どっかのASPを申請した時にアクセスにパスワード要求されるって教えてくれた。

対策

結論として、ファイル単位の有効/無効を設定する必要があり、サーバーの簡単機能では対応できない場合があります。

ここではエックスサーバーを例にしますが、エックスサーバーはディレクトリ単位でしか制御できません。
このように設定範囲がディレクトリの場合、サーバーのポチポチ機能で解決するのは無理です。

wp-admin

.htaccessを修正する

どういう手法でもいいので.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。

管理人
管理人

はっきり言って人間が記憶できる程度のパスワードだと無意味です。

りさ
りさ

キーワードみたいな意味ある文字列も避けたほうがいいよ。

この記事は参考になりましたか?

関連記事

コメント

この記事へのコメントはありません。