Webサーバーの認証方式として古くから使われているBasic認証。これの次世代版に、より安全な認証が行えるDigest認証があります。
今回この認証で使用するパスワードファイル(.htdigest
)を生成する必要があったのですが、諸事情で普通使われるツール“htdigest”(こっちは頭のピリオドがない)が利用できませんでした。そこで思い切って.htdigestを生成するツールを作ってみました。
.htdigest 生成ツール
自由にご利用ください。
ご利用方法
- .htdigest 生成ツール を開きます。
- テキストボックスに
username:realm:password
の形式で、ユーザーごとに改行して入力してください。 - [生成してダウンロード] をクリックすると、.htdigestが生成され
htdigest.txt
ファイルとしてダウンロードされます。 - これをサーバーの適切な箇所にアップロードし
.htdigest
にリネームしてください。
Tips: realm (レルム; 認証領域) は任意の値を指定でき、認証領域の識別に利用されます。具体的には.htaccessなどでDigest認証を設定するときにAuthName
で指定した値と関連しており、AuthNameとrealmが一致したユーザーのみ認証を通過できます。
realmはクライアントの認証画面に表示されます (サンプル; この場合realmはtest
)。
自作
ツールの性質上、内容の漏洩等セキュリティーリスクには十分配慮して設計しています。
どうしても不安だという方は以下に.htdigestの生成方法に関して記しておきますので、これをご参考に自作ください。
.htdigestの構造
.htdigestは、.htpasswd(Basic認証のパスワードファイル)と同じくテキストファイルです。
その書式は以下のようになっています。
username:realm:MD5(username:realm:password)
PHPでの実装
function htdigest($user, $passwd, $realm='Restricted Area'){ if((string) $user === '' || (string) $realm === '' || (string) $passwd === '' || preg_match('/[:\n\r]/', $user.$realm)) return null; $prefix = $user .':'. $realm .':'; return $prefix . md5($prefix.$passwd); } echo htdigest('USERNAME', 'PASSWORD', 'REALM');
Perlでの実装
use Digest::MD5 qw(md5_hex); sub htdigest(\$\$;\$){ my($user, $passwd, $realm) = (shift, shift, shift || 'Restricted Area'); if($user=='' || $passwd=='' || ($user.$realm) =~ /[:\n\r]/) return; $prefix = $user .':'. $realm .':'; return $prefix . md5_hex($prefix.$passwd); } print &htdigest('USERNAME', 'PASSWORD', 'REALM');
Digest::MD5モジュールを使用しています。このモジュールが利用できないときはDigest::MD5::Perlなどで代用できます。
Note: このコードは動作検証していません。
Javascriptでの実装
<script type="text/javascript" src="md5.js"></script> <script type="text/javascript"> function htdigest(user, passwd, realm){ if(realm=='') realm = 'Restricted Area'; if(user=='' || passwd=='' || (user+realm).match(/[:\n\r]/)) return; prefix = user +':'+ realm +':'; return prefix + MD5_hexhash(prefix+passwd); } alert( htdigest('USERNAME', 'PASSWORD', 'REALM')); </script>
JavascriptにはMD5を扱えるビルトイン関数が無いため、「高度なJavaScript技集」のmd5.jsを使用しています。
Note: このコードは動作検証していません。
No comments:
Post a Comment