1. ホーム
  2. c#

[解決済み] パスワードリセットを行うには?

2023-07-21 19:02:25

質問

ASP.NETでアプリケーションを作っているのですが、具体的にどのようにすれば Password Reset 関数を実装する方法を具体的に考えてみました。

具体的には、以下のような質問があります。

  • クラックされにくいUnique IDを生成する良い方法は何ですか?
  • タイマーを付けるべきでしょうか?もしそうなら、それはどのくらいの長さであるべきですか?
  • IP アドレスを記録する必要がありますか? それは重要ですか?
  • パスワードリセット画面では、どのような情報を要求すればよいのでしょうか?電子メール アドレスだけですか?それとも、電子メールアドレスと、彼らが「知っている」情報の一部でしょうか?(好きなチーム、子犬の名前など)

他に気をつけるべきことはありますか?

<ブロッククオート

NB : その他の質問 ある 用語解説 技術的な実装を完全に無視しています。実際、受け入れられた回答は、血なまぐさい詳細を隠しています。私は、この質問とその後の回答が血なまぐさい詳細に踏み込むことを望みますし、この質問をより狭く表現することによって、回答が「ふわふわ」ではなく「血なまぐさい」ものになることを望みます。

編集 : そのようなテーブルがSQL Serverでどのようにモデル化され、処理されるかにまで踏み込んだ回答や、回答へのASP.NET MVCのリンクがあればありがたいのですが。

どのように解決するのですか?

たくさんの良い答えがあるので、すべてを繰り返すのは面倒です。

1つの問題を除いて、それは間違っているにもかかわらず、ここでほとんどすべての答えによって繰り返されています。

Guidsは(現実的に)一意であり、統計的に推測することは不可能です。

これは真実ではありません。GUIDは非常に弱い識別子であり、本来は ではありません。 を使うべきではありません。

構造を調べると、最大で合計128ビット...今となっては多くないと思われますね。

そのうち、前半は(生成系の)典型的な不変量で、残りの半分は時間依存(あるいはそれに類するもの)です。

全体として、それは非常に弱く、簡単にブルートフォースされるメカニズムです。

だから、そんなの使わないで!

その代わりに、単純に暗号的に強力な乱数生成器 ( System.Security.Cryptography.RNGCryptoServiceProvider ) を使用し、少なくとも 256 ビットの生のエントロピーを取得します。

残りのすべては、他の多数の回答が提供したとおりです。