私の意見:登録されているすべてのユーザーの中でユーザーのメールアドレスが一意である必要があると仮定すると、パスワード回復ページでユーザーのメールアドレスを尋ねられます。「ユーザー名またはメールアドレス」にすることはできますが、少し調整しても、追加のバックエンド処理を正当化するのに十分なユーザーには役立たないと思います。
セキュリティを強化するために、ユーザー名または電子メールアドレスがデータベースで見つかったことを確認または拒否しないでください。
パスワードのリセットリンクが記載された電子メールは正常に機能するはずです。ハッカーがリセットリンクを簡単に推測できないように、ハッシュを使用します(長いほど良いです。間違いなく20文字以上)。セキュリティを強化するために、リセットリンクが機能しなくなるまでの制限時間を指定します。
ユーザーがリンクをクリックして新しいパスワードを選択した後は、それらを自分のアカウントに自動的にログインさせないでください。それらを最初からログインさせます。これにより、彼らは新しいパスワードを確実に知ることができ、ハッカーがアカウントに直接ログインできるようにするパスワード回復コードのバグの可能性を減らすことができます。
ユーザーにスパムフォルダを確認するように通知し、リセットリンクを受信する必要があると合理的に想定できる時間枠を提供します(これにより、ユーザーはあなたに不満を言う前にどれだけ待つかを知ることができます)。
通常、セキュリティの質問は悪い考えです。まず、ユーザーは自分の答えが何であったかを思い出すのに苦労します。これは、ユーザーのパスワードに何かを追加するようなものですが、その余分な部分が何であるかについてのヒントを世界に提供します。また、回答では大文字と小文字が区別されず、アルファベットまたは英数字のみが使用される傾向があります。
パスワード回復システムが機能していない場合に、ユーザーがあなたに連絡する方法を含めるようにしてください。ただし、これはソーシャルエンジニアリングハッキングの手段となる可能性があるため、注意が必要です。
パスワードの制限は、ユーザーにとって苛立たしいものになる可能性があります。これを実装すること、許可する試行回数、およびその制限を超えた場合の結果について、じっくり考えてください。ほとんどの人は、単一のパスワードのバリエーションを持っています。さて、それはセキュリティの観点からは賢明ではありませんが、それは起こります。適度に行動するユーザーは、1分以内にhooper2012、Hooper2012、hooper20121、Hooper20121を試すことができます。
たとえば、5回失敗した後、ユーザーは今後の試行の間に60秒待機することができます。さらに5回失敗した後、それを2倍にして120秒にします。試行が5回失敗するごとに、待機期間を2倍にし続けます。たとえば、50回連続して失敗するまでそれを続けると、それらの50回の試行を使い果たすのにかかる最小時間は1日18時間35分になります。1日に12回以上連続して失敗したアカウントを通知するために、コードに何かを含めることを強くお勧めします。
50回連続して失敗した後、アカウントを一時的に無効にし、ユーザーにテクニカルサポートに連絡するように要求します。繰り返しますが、ソーシャルエンジニアリングには注意してください。
ユーザーが正しいログイン資格情報を提供したら、待機期間を0にリセットします。