LinuxサーバーでBasic認証をする時の注意点


Basic認証は、手軽にWebページにアクセス制限をかける方法としてよく使われています。手順もそこまで難しくないし、大抵のレンタルサーバーでも使えます。しかし、このBasic認証、気をつけないといけない点があります。

ApacheでBasic認証をかける場合、IDとパスワードのペアはhtpasswdを使って設定するのが一般的です。htpasswdで作成したファイルを見ると、パスワードは暗号化されて保存されています。(オプションをつける事で暗号化しないで保存することもできます)

この暗号化が曲者で、htpasswdはLinuxの場合デフォルトではcryptを使って暗号化を行うのですが、cryptは8文字までの長さしか暗号化してくれません。9文字目以降の文字は無視されます。つまり、”abcdefghi”というパスワードを設定した場合、最後のiは切り捨てられ”abcdefgh”を暗号化した文字列が保存されます。この現象は、ブラウザ上でユーザが入力したパスワードの照合にも当てはまります。試しに、”abcdefghi”というパスワードを設定した上で、ブラウザ上で”abcdefghwrong”とパスワードを入力してみましょう。照合に使われるのは最初の8文字だけなので、パスワードが間違っているにも関わらず認証できてしまいました。正しいパスワードを入力した場合も認証されるので、注意しないとこの現象にはなかなか気がつきません。

対策は簡単でhtpasswdコマンドでパスワードを設定する際に-mオプションをつけてやって、暗号化にmd5を使うようにしてあげましょう。

htpasswd -m foo.txt username

びっくりしたなあ…。

参考


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です