ベーシック認証のパスワードを設定するとき、みなさんはどのようにしてますか?
コマンドラインでパスワードを作る方やネット上のツールを利用される方が多いと思います。
私はネット上のツールで作ってるのですが、先日長めのパスワードを設定したところ9文字以降を何にしてもbasic認証を通過できてしまう自体に遭遇し、その理由と9文字以上のパスワードを設定する方法を調べました。
なぜ8文字までになってしまうのか
basic認証のパスワード作成にはhtpasswd
コマンドが使われおり、内部的には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.
【apache】ベーシック認証で8文字以上の長いパスワードを設定するときの注意
(linuxの場合、OSの)crypt()アルゴリズムを使うと、先頭の8文字しか使われないよ。長いパスワードを渡しても、はみ出た分は無視するよ。
ネット上にある多くのツールもおそらくcrypt()アルゴリズムを使用しているのではないかと思われます。
8文字より長いパスワードを設定する方法
9文字以上のパスワードを設定するにはMD5アルゴリズムを使い、その方法は3つあります。
- windowsのコマンドプロンプトを使う
- htpasswdに-mオプションを追加する
- MD5アルゴリズムに対応しているツールを使う
windowsのコマンドプロンプトを使う
windowsのhtpsswdコマンドはデフォルトでMD5アルゴリズムが使われているらしくそのままでも8文字以上のパスワードに対応したハッシュを作成できるようです。
C:\>htpasswd.exe -nb id passwordpassword
htpasswdに-mオプションを追加する
$ htpasswd -nbm id passwordpassword
MD5アルゴリズムに対応しているツールを使う
少し調べてみたところ下記の2つがMD5アルゴリズムに対応していました。
- 株式会社エン・PCサービスさんの提供している.htpasswd生成ツール(MD5対応)
- CityJPOfficeさんの■Apacheのベーシック認証用パスワード発行フォーム
やはりMD5アルゴリズムに対応しているツールは少ないみたいですね。