認証にパスワード回復を実装します。私はこれをしばらくまとめておらず、知っておくべきことがあるかどうか疑問に思っています。
現時点での私の考えは:
いいですか?このアプローチが推奨されなくなった長年の間に何か変わったことはありますか?
更新
私が選択した追加:
いいですか?
はい。メールがサイトの主要な認証形式であると想定しています。
このアプローチが推奨されなくなった長年の間に何か変わったことはありますか?
私が知っていることではありません。
ここで、考慮すべき点をいくつか示します。
メールが存在しない場合、何を言って何をしますか?
システムでユーザー名を使用している場合は、メールアドレスではなく、ユーザー名を尋ねた方がよい場合があります。アカウントに関連付けられたメールアドレスに回復用メールを送信しますはユーザーに開示しません。
トークンは、実際にはユーザーアカウントのワンタイムパスワードです。
bin2hex(openssl_random_pseudo_bytes(16));
users
テーブルではなく、個別のテーブル。私は確かに周りを見回して、最新かつ最高の暗号化アルゴリズムを見つけます。どれが最適に機能するかについては多くの議論がありますが、一般的に、最先端のアルゴリズムの中で、1つまたは別のアルゴリズム間の利点は無視できる程度であることがわかりました。そうは言っても、SHA256、SHA512、RipeMD、またはWHIRLPOOLなどのMD5の代替案を検討することは確かです。常に調査を行い、暗号化方式が低価格になっていないことを再確認することをお勧めします。
また、SALTを含む質問は見当たりませんでした。これは間違いなく、ハッカーが辞書攻撃やハッシュテーブルを使用して解読するのが簡単すぎるパスワードを実装する可能性があるユーザーに追加のセキュリティを提供するために実装を検討する可能性のあるものです。
最後にもう1つ(私はあなたがこれを検討したと仮定しています)。私が確かにForgot-my-Passwordシステムに入力する回復メールが実際にそのユーザーのファイルにあるメールと一致することを確認します。また、安全のためにセキュリティの質問を含めることもあります。
これが一般的なアプローチなのか、それともこのような問題に対する私の個人的な方法/アイデアなのかはわかりませんが、次のようにします。
クライアントのIPを取得し、任意のアルゴリズムで暗号化しますが、リンク内の結果をトークンとして取得し、タイムスタンプを挿入します。
この場合、リンクはクライアントのIPと特定の時間のみ有効です。
今、攻撃の真っ最中の人でさえ、リセットトークンをハイジャックすることができません。
ユーザーのMACアドレスを要求することもできますが、私の考えでは、これはほとんどやり過ぎです。
これは、最新のリセットトークンを保存するための私の個人的なアプローチです。