Basic 認証を設定したときにはまった落とし穴

Basic 認証を付けたときにはまった落とし穴

無料レンタルサーバーって public_html 配下にしかファイルを置けないことが多いので、ウェブログのメンテナンス用のスクリプトなんかを置いているディレクトリには何かしらのセキュリティを設けたい。

手っ取り早いのが .htaccess で Basic 認証を付けたり、IP アドレスでアクセス制御したりする方法なんだけど、後者は固定 IP を持っていないと面倒。

Basic 認証を設定する

Basic 認証は .htaccess と、暗号化したパスワードを記載した .htpasswd という 2 つのファイルを使って設定する。

以下はスタードメインの無料レンタルサーバーでの .htaccess の設定例。.htpasswd を配置している場所を正しく指定しないとサーバーエラーとなるので慎重に。

.htaccess
AuthUserFile /home/サーバー ID/ドメイン名/public_html/.htpasswd
AuthGroupFile /dev/null
AuthName "Authentication"
AuthType Basic
require valid-user

あとは .htpasswd だが、「.htpasswd 生成」などのキーワードでググると .htpasswd を簡単に作成できるサイトがヒットするので、ID: user、Password: password で作成してみると以下のような文字列となった。

.htpasswd
user:NGNBf5ixn0Tlc

いやー、簡単だなー、便利なサイトがあるもんだなー。

あとは .htaccess をパスワードをかけたいディレクトリに、.htpasswd をしかるべき場所に配置すれば Basic 認証が動作する。

ちょっと待って!

Basic 認証の注意点

Basic 認証って簡単に使えて便利な方法なんだけど、ID とパスワードさえあれば誰でも認証できてしまうので、セキュリティ的にはちょっと弱い。

そこで、少しでもセキュリティを固くしようと長いパスワードを用意するわけだが…。

ダーッとねぇ、長いパスワードを用意したんですねぇ。でもねぇ、あれぇ?変だなー、変だなー。おかしいなー、おかしいなー。つってあたし、ずーっとハマってたんですよ。そしたらねぇ、気付いちゃったんですね…。

8 文字より後が無視されてることに。

password でも password123 でも passwordabc でも認証が通っちゃう。

.htpasswd
user:NGNBf5ixn0Tlc

実はこの形式、crypt() というアルゴリズムで暗号化されたもので、最初の 8 文字しか使用されないという恐ろしい仕様だった。

When using the crypt() algorithm, note that only the first 8 characters of the password are used to form the password. If the supplied password is longer, the extra characters will be silently discarded. htpasswd - Manage user files for basic authentication

.htpasswd を生成できるサイトを利用すると、この形式で暗号化されるところもあるので注意が必要だ。長いパスワードに対応しているサイトを探すのも良いけど、自分で .htpasswd を生成するのが一番安全だろう。

コマンド
# htpasswd -nbm user password123
user:$apr1$9nQhMWFW$NU4O.l9mkez4DAJ2Wkvd8/

htpasswd コマンドで m オプションを付ければ MD5 で暗号化され、8 文字より長いパスワードも使用できる。これは Apache バージョン 2.2.1 以降では標準となっているとのこと。

結論

暑い!夏と言えば稲川淳二。

スポンサーリンク

関連する記事

フォローする