WordPressのログイン画面にBasic認証をかける方法

Web制作テクニック
basic auth for wp-admin

ここ最近、何者かがWordPressのログイン画面に入り、乗っ取りを試みる攻撃(Brute Force Attack:ブルートフォースアタック)が問題になっているようです。当サイトでも、ログインエラー履歴を確認したところ、そのような攻撃を受けていたことがわかりました。(もちろん突破されてはいませんでした。)

Brute Forceとは「力ずくで、強引に」という意味で、文字どおり力ずくで暗号を解読して、パスワードを取得する攻撃手段のことを指す。

パスワードの取得のため、辞書ツールを使いあらゆる文字の組み合わせで総当たりを試み、暗号の解読のためには考えられるすべての暗号鍵をリストアップして暗号文の切れ端を復号化できるか試みる。 

非常に効率の悪い方法であるが、認証失敗回数制限によりIDが凍結されない限り、パスワードが取得されてしまう可能性がある。

セキュリティ用語辞典より

対処法のひとつとして、連続してログインに失敗した場合、一定時間そのIPからのログイン操作を出来なくするプラグイン《Simple Login Lockdown》を導入するという手もあるみたいですが、一回のログイン試行でIPを変えてくる攻撃者もいるそうなので、盤石とはいきません。

そこで、そもそもログイン画面自体に入られなければ良いという考えのもと、WordPressのログイン画面にBasic(ベーシック)認証をかける方法についてここで書きます。つまりWordPress管理画面へのログインを二重ロックにしてしまおうという内容です。

Basic認証(Basic Authentication)とは、ユーザーIDとパスワードでアクセス制限をかける方法です。

参考:Basic認証 – Wikipedia

[adsense]

WordPressのログイン画面にBasic認証をかける

1. .htaccessファイルを作成する

wp−login.php(ログイン画面)があるディレクトリに格納されている.htaccessファイルに以下を追記します。※.htaccessがない場合は、テキストエディタで作成してアップロードしてください。

.htaccess

<Files wp-login.php>
AuthName "Input ID & Password"
AuthType Basic
AuthUserFile /var/www/.htpasswd
Require valid-user
</Files>

# Exclude the file upload and WP CRON scripts from authentication
<FilesMatch "(async-upload\.php|wp-cron\.php|xmlrpc\.php)$">
Satisfy Any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>

2行目AuthNameの”Input ID & Password”の部分はBasic認証ダイアログで表示されるメッセージなので、何でもかまいません。(日本語の場合だと文字化けする恐れがあります)

4行目AuthUserFileの/var/www/.htpasswdの部分は、次の手順2で作成する.htpasswdファイル(パスワード設定ファイル)へのフルパスを指定します。なお、.htpasswdファイルの格納場所は、お使いのサーバーの利用規定やFTP権限などに沿って適宜決めてください。

8行目以下については下記項目をご覧ください。

Basic認証を設定した際に起こる問題への対処

.htaccessでBasic認証設定をした場合、それが邪魔をして、WordPressの予約投稿に失敗したり、Flashアップローダーが正常に動作しなかったり、XML-RPCからの投稿が出来なかったりといった問題が発生するようです。

これら問題の対処法として8行目以下の記述が必要となります。この方法は、WordPress Codexにも掲載されているものです。

2. ID・パスワードの設定(.htpasswdファイルの作成)

Basic認証用のIDとパスワードを記述した.htpasswdファイルを作成します。パスワードは暗号化したものを記述するようにします。そうすることで、他者に設定ファイルを覗かれたとしても、パスワードはバレずに済みます。

パスワードの暗号化には、以下のようなサービスを利用するのが便利です。

Webツール:.htpasswdファイル生成(作成) – ルフトツールズ

上記のツールを使用して、例えばIDをhtdsn、パスワードをaa11bb22と入力すると、以下のように暗号化されたコードが生成されます。それをそのままテキストファイルに貼り付けて、ファイル名を .htpasswdとして保存します。

.htpasswd

htdsn:5U6CNoCuLLDNw

作成した.htpasswdファイルを、先程の.htaccessファイルで記述したディレクトリ(上記例では /var/www/)にアップロードします。

ただ、.htpasswdファイルのアップロード先は、Web上から閲覧できない場所にある方が好ましいです。上記例では /var/www/ を指定していますが、/www/ ディレクトリがWeb公開領域なのであれば、/var/ より下階層の別のディレクトリにアップロードすれば、Web上から閲覧されることはない筈です。

Macで.htaccessや.htpasswdファイルを作成・編集する場合
Mac OSではデフォルトの状態ですと .(ドット)から始まるファイルは非表示となるため、.htaccessファイルをファインダー上で確認出来ません。

しかし、CyberDuck, FileZiLLa等のFTPアプリ上では表示させる事ができます。なので手段としては、ローカルでは .(ドット)から始まらないファイル名(例:text.htaccess)で作成・編集し、サーバーにアップした後 .htaccessにファイル名を変更するというやり方もあります。

ちなみに、Mac OSで .(ドット)から始まるファイルを表示させる方法については、下記リンクに詳しく載っています。

参考:mac .htaccess 見えない | gworks web site

3. ログイン画面の確認・その他動作確認

以上が完了したら、サイトURL/wp-admin でログイン画面にアクセスします。設定出来てあれば、下図のようにBasic認証ダイアログが表示されます。

basic auth for wp-admin

あとは管理画面に入り、予約投稿やFlashアップローダーが正常に機能するか、試してみてください。これらを含めて問題なければ、WordPressログイン画面へのBasic認証設定は成功です。