先月(2011.09.27)のWeb担当者フォーラムの記事
忘れたパスワードを問い合わせられるシステムなんて作っちゃいけない
を読んで、その昔(7年ぐらい前)、そんな会員登録制のサイトを制作したことを思い出しました。
Web担の記事は、あなたの忘れたパスワードは「XXXXXXX」です、ということは、パスワードをそのままデータベースに保存しているから出来るということで、そんな危ないシステムは作っちゃイケないと言ってるわけで、一部を抜粋引用すると、
ユーザーが指定したパスワードは生の値としてデータベースに保存せず、ソルト付きで生成した不可逆のハッシュ値(メッセージダイジェスト)として保存し、その情報で認証する仕組みにすること(可逆形式の暗号化も禁止)
だそうです。
要は入力したパスワード(例:pass)をそのまま保存せず、
それをハッシュ値(例:6348a784ad75ed8687d0368a6ac5b885afa28e7c)にしてデータベースに格納すれば、ハッシュ値から元のパスワードは推測できないので万一漏洩してもパスワードは割り出されないし、ユーザーがログインするたびにハッシュ値を出して、データベースの値と照合ができるのでOKとのこと。
なるほど。
今は確かにパスワードを忘れると、「新しく登録しなおせ」と言ってくるサイトが当たり前になってきているのですが、ただしそう(パスワード再登録を)要求するサイトがすべて、パスワードをハッシュ値にしてデータベースに格納してくれてるかどうかは別の話。
パスワードを忘れたユーザーには「新しく登録しなおせ」と言っていても、パスワードは相変わらずナマのままDBに格納しているシステムのほうが、まだまだ相当多いと思います。
もちろん。メールでユニークなURLを提示して「新しく登録しなおせ」というのがいまや常識だし、「あなたのパスワードはこれ」とメールで送られてくるのはヤバ過ぎ。
そんなメールでパスワードを送り返してくるサイトは、さすがに減ったように思います。
しかし、10年ほど前に会員登録だけして放置していた大手企業のサイトがあって、「パスワードを忘れた方は」という入力ページで所定の項目を打ち込み、Submitすると、登録時のメールアドレスに
●●●●●様
○○○○○○事務局です。
お問い合せのパスワードのご連絡です。パスワード:***************(←実際のパスワードでした)
パスワードは他人に知られないようにご自身で管理をお願いいたします。
(後略)
ズバリ、教えてくれました(苦笑)