【apache】ベーシック認証で8文字以上の長いパスワードを設定するときの注意
問題
ベーシック認証で長いパスワードを設定したつもりなんだけど、8文字目以降が無視されているような気がする。大丈夫?
答え
ベーシック認証の設定には htpasswdコマンドを利用する。
linuxのhtpasswdに関しては、知らないとびっくりな仕様が。
http://httpd.apache.org/docs/2.2/programs/htpasswd.html
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.
(linuxの場合、OSの)crypt()アルゴリズムを使うと、先頭の8文字しか使われないよ。長いパスワードを渡しても、はみ出た分は無視するよ。
警告ぐらい出した方が親切&安全なのでは…。マニュアルの注意書きは、次期バージョンの2.3、2.4でもそのままとなっているようです。
windowsの場合は、MD5アルゴリズムがデフォルトで使われて、こんな結果が得られる。この場合は8文字以上のパスワードを使用できる。
C:\>htpasswd.exe -nb test testtesttesttest Automatically using MD5 format. test:$apr1$xq6WoO/J$oQAc7q/IJ/EgqgKAVSUFL.
linuxの場合、デフォルトでOSのcrypt()が使われて、こんな結果が得られる。
# htpasswd -nb test testtesttest
test:KF11YCgMWJOxk ←8文字以上の長いパスワードに対応できない形式
linuxで8文字以上の長いパスワードを設定したいときは、mオプションでMD5アルゴリズムでハッシュを作ってもらうこと。
# htpasswd -nbm test testtesttesttest test:$apr1$Oth9B/..$FykTbpWnvDkuGAR9Fhi140
さりげなく m オプションをつけると、「やるな、おぬし」と思ってもらえることもあるかもしれません。
コメント