ApacheのBASIC認証用ユーザで9文字以上のパスワードを使用する場合

  • 投稿日:
  • by
  • カテゴリ:

Linuxでhtpasswdコマンドを利用して、ApacheのBASIC認証用ユーザを作成する場合、パスワードはcrypt()関数を利用してハッシュされる。

crypt()関数の仕様として8文字までしかハッシュできないため、パスワードに9文字以上入力しても8文字までしか使用されない。それ以上は切り捨てられる。

そのため、パスワードに『abcdefghij』を設定しても、最後の『ij』が切り捨てられて、『abcdefgh』だけがハッシュされて.htpasswdファイルに書き込まれる。

実際にブラウザでアクセスして、認証する際にも、始めの8文字が『abcdefgh』であれば、それ以降の文字はハッシュされるときに切り捨てられるので、マッチしていてもしていなくても認証OKとなる。
つまり、上記ケースでは以下のいずれでも認証OKとなる。
・abcdefgh
・abcdefghij
・abcdefghaaaaa

上記仕様から、標準では9文字以上のパスワードが利用できない。しかし、パスワードの暗号化にmd5を利用すると9文字以上のパスワードが利用できる。

md5で暗号化するには、以下のように『-m』オプションを付与すればよい。

【実行例】
# htpasswd -m /etc/httpd/conf/.htpasswd user3
New password:
Re-type new password:
Adding password for user user3

md5で暗号化した場合は、パスワードがキッチリ一致しなければ認証OKとならない。
md5の場合の文字数制限は確認中。。。
ただ、相当長くても大丈夫そう。

【.htpasswdの内容】
user2:YbFSlpa9ix7so ←crypt()で暗号化したもの
user3:$apr1$sGgFf...$YtExFt5siF7hd2ARlaSst/ ←md5で暗号化したもの
※混在していても正常に動いた。