web-dev-qa-db-ja.com

推奨されるパスワードリセットメカニズムとは何ですか?

すべて、

私は小さな、非営利のWebアプリを開発しています。パスワードを紛失した可能性のあるユーザーを支援する方法を決定しようとしています。優先順位の高いメカニズムが必要です。
1)ユーザーフレンドリー。
2)安全。
3)複数の地域で簡単にスケーラブルです(つまり、場所に依存しないため、たとえばSMSはありません)。

3
JDelage

別のアプローチ:

  1. 登録時に使用したメールアドレスをユーザーに提供してもらいます

  2. メールアドレスが実際にアカウントに属していることを確認します(含まれていない場合はエラーを報告します)

  3. でそのメールアドレスにメールを送信...

    • ...自動生成された新しいパスワード(辞書に載っている単語はランダムな文字よりも優れています)で、一定期間(24時間としましょう)後に失効します

    • ...この新しいパスワードはあなたのウェブサイトからのリクエストとして送信され、彼らがそのメールを無視するようリクエストしなかった場合のメッセージ

    • ...新しいパスワードで再ログインするために訪問する必要があるURL(このページが実際のパスワードではなく一時的なパスワードに対して検証されることを確認してください)

  4. 最初のログイン後、パスワードを覚えているページに更新する必要があるページに移動します(ハッシュしたため、実際のパスワードを表示することはできませんか?)

2
John Conde

私の標準的な操作手順:

まず、ユーザーに電子メールアドレスまたはログイン名の入力を求めます。情報が見つからない場合、アドレスが偽であることをユーザーに伝えるのはNiceですが、これはこの情報をブルートフォースするのにも役立ちます。ログインとメールアドレスが同一ではないシステムでは、同じページでこれらのeitherを要求する方が、異なるページに分けるよりもユーザーフレンドリーになります。

次に、一意のトークンを生成し、アカウントに関連付けます。このトークンをURLに統合するリンクを含むメールをユーザーのメールアドレスに送信し、ワンクリックでアカウントを取得できるようにします。

第三に、トークンのあるURLにアクセスすると、ユーザーに新しいパスワードの入力を求めます。フォーム送信にもトークンが含まれていることを確認してください。ユーザーのパスワードを新しい目的の値に変更し、トークンを無効にします。

私が見たバリエーションでは、メールにsecondトークンを追加します。このトークンは、結果のパスワードリセットページで入力する必要があります。

また、妥当な期間(たとえば48時間)後にトークンを無効にする必要があります。

ここでは、パスワードのリマインダーやセキュリティの質問がないことに注意してください。ユーザーの電子メールアカウントが侵害された場合、悪意のあるユーザーがアカウントをハイジャックできるようになります。これは解決する問題ではありませんです。 couldある種のセキュリティの質問を追加しますが、その前に、これらのいずれかに最後に直面したことを考え、それらがどれだけ苦痛であるかを思い出してください。

システムがユーザーが複数の場所からログインすることを許可している場合(それがいい!)、これを許可するために使用するトークンがユーザーの電子メールアドレスとパスワードの両方に関連付けられていることを確認することができます。これらのいずれかが変更されると、他のすべての場所からユーザーがログアウトされます。

1
Charles