ログイン画面のセキュリティ強化【ベーシック認証】

10-02

Brute Force Attack(ブルートフォースアタック)といった不正ログイン問題を防止する為にログイン画面にベーシック認証を設定しました。
色々なサイトを参考にしたのですが、webデザインの領域には登場しない用語が多く、最初は基本的な概念を掴むのも大変でした。なので、その辺に留意してまとめておきます。

Brute Force Attackとは?

wordpressを使ったブログに第三者が不正にログインし、サイトを乗っ取るということが問題になっているようです。
ブルートフォースアタックとはその不正ログインの一種で、直訳すると『総当たり攻撃』。

総当たり攻撃とは、暗号や暗証番号などで理論的にありうるパターン全てを入力し解読する暗号解読法。

人間の操作では「面倒臭過ぎ」て解析不可能な回数の計算をコンピュータにまかせ、時間の許す限りパスワードの検証等を行う行為がコンピュータセキュリティ分野で良く知られている。

時間的制約が無い限りは、確実にパスワードをクラックする方法である。

要はダッシュボードのログイン認証を強引に突破して、何か悪さしようとするってことですね。

ベーシック認証

そこで、ダッシュボードのログイン認証の前にもう一つ認証画面を設けて、2重にロックをかけるのがベーシック認証です。

タイトル下のサムネイル画像のようにWordPressのものと同様、ユーザー名とパスワードを入力するという形になります。
正しいIDとパスワードが入力された場合はWordPressのログイン画面に進め、未入力や間違っていた際は、サーバは401レスポンスコードを返します。

ちなみに『Cragy Bone(狂骨)』というプラグインをインストールすると、ログイン履歴を保存して見られるようになります。

ダッシュボードの【プラグイン】→【新規追加】からも検索できます。
【インストール】→【有効化】して、【ユーザー】→【ログイン履歴】をクリック。
10-03
すると、下のようにログイン履歴が閲覧できるようになります。
10-04
ベーシック認証をかける前に数日様子を見たんですが、自分のIPだけでした(怖いもの見たさの期待を裏切られ、なぜか若干がっかり)。

設定するための2つの手順

大まかに分けると2つの手順で設定できます。

  • ① .htaccessファイルを作成する
  • ② .htpasswdファイルを作成する

まずwebデザイナーさんは『.htaccessファイル』という単語自体知らないという方が多い気がします。

.htaccess(ドットエイチティーアクセス)ファイルとは、Apacheを用いたWebサーバにおいて、ディレクトリ単位で設置及び設定を行える設定ファイルである。

.htaccessを特定のディレクトリに設置すると、.htaccess内に記述された内容が設置されたディレクトリとその下層のディレクトリに対して適用される。

用途としては、

・IDとパスワードによる制限 – Basic認証やDigest認証を用いて特定のIDとパスワードを用いてログインしないと閲覧できないようにする。

・IPアドレスとリモートホストによる制限 – 特定のIPアドレスとリモートホストのアクセスのみを許可、あるいは拒否を行えるようにする。

・エラーメッセージのカスタマイズ – IDとパスワードが違う、アクセスが禁止されている、ページが見つからない、サーバーでエラーが生じたといったエラーメッセージを独自のものに差し替えることができる。

この.htaccessファイルをブルートフォースアタックの恐れのあるwp−login.php(ログイン画面)があるディレクトリwp-admin ディレクトリに作成し、
同じ階層にIDとパスワードを指定する.htpasswdファイルを作成することで、ベーシック認証が設定できます。

(どちらかのディレクトリに.htaccess/.htpasswdファイルがあればベーシック認証がかれられたんですが、参考サイトに従って両方に作成しました。)

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

まずwp-admin ディレクトリに.htaccessファイルを作成し、以下のコードを記述します。

AuthName "Input ID & Password"
AuthType Basic
AuthUserFile /home/xxxx/wp-admin/.htpasswd
Require valid-user
AuthName:
認証ダイアログで表示される任意のメッセージ。日本語だと文字化けする恐れあり。
AuthType:
認証のタイプーベーシック(Basic)を指定。
AuthUserFile:
パスワードファイル(.htpasswd)の指定。サーバのルートディレクトリからのフルパスで記述。
require valid-user:
認証が通った全ユーザーに対してアクセスを許可する指定。

この際、属性(パーミッションーファイルやディレクトリに対するアクセス権)は『604』にします。

同様に以下のコードを記述した.htaccessファイルをwp−login.php(ログイン画面)がある階層にも作成します。
(最初からある場合はそこに追記。WordPressの場合、元々ある記述を削除すると正常に動作しなくなるので注意

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

違いは【Files wp-login.php〜/Files】で囲んで指定が及ぶ範囲をwp-login.phpに限定すること。

これがないと、wp−login.phpはindex.phpなどのファイルと同じ階層にあるので、普通にユーザーがサイトを閲覧する際にもいちいちベーシック認証を求められることになります。

② .htpasswdファイルを作成する

次に先ほど.htaccessファイルにフルパスで指定した場所に.htpasswdファイルを作成し、IDとパスワードを記述します。
(.htpasswdファイルは一つでOK)

パスワードはこちらのサイト『lufttools』などを利用して暗号化して下さい。

(下の画像はロリポップのhtpasswdファイル用パスワード生成ツール。今回使用しませんでしたがロリポップにはアクセス制限の設定ができるwebツールもあります。)
10-05
IDと暗号化したパスワードを次のように「:(コロン)」で区切って記述します。
(例) username:anodihuaidhvubb

改行して下に別のID:暗号化したパスワードを記述すると複数のアカウントを設定できます。
こちらもパーミッションを『604』にして、ファイルを保存します。

以上で設定は完了。
ダッシュボードにアクセスして、認証画面が現れたら設定は成功です。
10-00

参考サイト: