トップ «前の日記(2009-05-14) 最新 次の日記(2009-05-17)» 編集

Ussy Diary


2009-05-16

[Etc]パスワードを忘れたときの対応

よくパスワードを忘れるのですが、パスワードを再登録するやり方として 2 つの手法を見かけます。

  1. 新しく発行したパスワードを記述したメールを送信
  2. 一時的に有効なセッション ID 付きのパスワード更新 URL を記述したメールを送信

これらの手法について深く考えたことがないので、ユーザーと開発(実装)の立場でメリット、デメリットを考えてみようと思います。

ユーザー

1 の場合
  • パスワードをコピーしてすぐにログインできる
  • メールを削除しないと平文のパスワードがメーラーに残る
  • パスワードの再修正はユーザー次第
2 の場合
  • パスワードをユーザーに委ねられる
  • 入力完了後(一定時間経過後)には同一 URL にアクセスしても登録できない

1 の場合パスワードが平文で送られるというのはデメリットな感じがしますが、 1,2 ともに POP/HTTP で受信している場合に、盗聴されていると侵入されます。ので 1 はパスワードを変更するまで、第三者にパスワードを知られる状況になっていることがデメリットになると思います。

開発

開発する場合どういったものを実装する必要があるか考えてみます。

1 の場合
  1. ランダムな文字列を生成
  2. (ハッシュした)パスワードをデータベースに更新
  3. ランダムな文字列をメールで送る
2 の場合
  1. ファイルなりデータベースに、メールアドレス、セッション ID、有効期間を保存する(メールを忘れたリンククリック時)
  2. 送られてきた URL から保存しているセッションストアと検証
  3. 一致していた場合は専用のパスワード登録画面にリダイレクトする
  4. そこから送られてきた新しいパスワードを(ハッシュして)データベースに更新(セッション認証も行う)
  5. パスワード登録用のセッション削除
  6. タスク、 cron で一定間隔ごとに有効期間をチェックして無効なセッションを削除する

(組んだことがないので、もし自分が実装するのであればという話)

2 は開発コストが多くかかるのが分かります。平文のパスワードが残ってしまうリスクをどう考えるか問題はありますが、ユーザー、開発お互いの状況によって取捨選択できればよいものかなと思います。自分自身ユーザー側の立場としてパスワードを送られてくることは嫌ではありませんし、悩みどころではあるのかなと思いました。