7

メールでユーザーのパスワードをリセットするための通常のフローは次のとおりです。

  1. ランダムな文字列を生成し、データベーステーブルに保存します
  2. ユーザーへのメール文字列
  3. ユーザーが文字列を含むリンクをクリックする
  4. 文字列はデータベースに対して検証されます。一致する場合、ユーザーのpwはリセットされます

ただし、テーブルを維持したり、古い文字列を期限切れにしたりすることは、少し面倒なことのように思えます。この代替アプローチに明らかな欠陥はありますか?

  1. ユーザーの既存のパスワードのMD5ハッシュを生成します
  2. ハッシュ文字列をユーザーにメールで送信
  3. ユーザーが文字列を含むリンクをクリックする
  4. 文字列は、既存のpwを再度ハッシュすることによって検証されます。一致する場合、ユーザーのpwはリセットされます

ユーザーのパスワードはすでにハッシュ化およびソルト化された形式で保存されていることに注意してください。一意であるが繰り返し可能な文字列を取得するために、もう一度パスワードをハッシュ化しています。

そして、はい、明らかな「欠陥」が1つあります。このように生成されたリセットリンクは、ユーザーがパスワードを変更する(リンクをクリックする)まで期限切れになりません。しかし、なぜこれが問題になるのかはよくわかりません。メールボックスが危険にさらされた場合、ユーザーはとにかく困惑します。また、ユーザーのパスワードが変更されると、リセットリンクが一致しなくなるため、再利用のリスクはありません。

4

5 に答える 5

8

を修正するobvious flawには、ハッシュしているものに現在の日付(および、1日でも長すぎる場合は、1日の現在の端数を表す時間関連の情報)を追加して、ミステリー文字列を生成して確認します。これにより、文字列が作成されます。有効期限」(より長い「有効期限」が必要な場合は、前の日付と現在の日付または端数を確認できます)。ですから、あなたの計画は非常に実行可能であるように私には思えます。

于 2010-05-03T01:22:20.977 に答える
3

誰かがパスワードハッシュを使用してデータベースにアクセスした場合、実際のパスワードはわかりません。このシステムを実装すると、リセットリンクが生成され、パスワード自体がリセットされます。ランダムな文字列と侵害の知識があれば、すべてのランダムな文字列を無効にすることができ、アクセスの知識がなくても、パスワードをリセットするプロセスのユーザーだけが侵害されます。ありそうもないシナリオですが、ランダムな文字列の名目上のオーバーヘッドを考えると、検討する価値があるかもしれません。

于 2010-05-03T02:40:29.530 に答える
2

実際、これをもう一度考えた後、あなたの方法は「通常の流れ」よりも安全性が低い可能性があります。

返送するだけHASH(HASH(user's original password))で、攻撃者にレバレッジを与えることができるシナリオを見ることができます。

シナリオ1:

  1. Jimとしてサイトに登録しますjimjones@microsoft.com
  2. Jimパスワードのリセットを要求しますが、使用しません。リセットされた電子メールは、彼の受信トレイに永遠に残されます。
  3. Jimあなたのサイトの彼のメールアドレスを変更します。
  4. jimjones@gmicrosoft.comによって危険にさらされていBobます。
  5. Bob現在、分散型GPGPUファームを介してブルートフォース攻撃を実行し、Jimのパスワードを回復します。

シナリオ2:

  1. Jimjimjonesupinthisma!彼の銀行口座のパスワードを使用します。
  2. Jimとしてサイトに登録しますjimjones@microsoft.com。銀行口座に関連付けられてjimjones@microsoft.comいるわけではありません。Jim
  3. jimjones@gmicrosoft.comによって危険にさらされていBobます。
  4. Bob今リセットを要求します、彼は今持っていHASH(HASH(jim's password))ます。
  5. Bob現在、分散型GPGPUファームを介してブルートフォース攻撃を実行し、のパスワードを回復します。このパスワードを使用して、銀行口座Jimにアクセスします。Jim

シナリオ3:

(サイトはTLSを使用しており、ユーザーはTLSを介して登録します。)

  1. Jimとしてサイトに登録しますjimjones@microsoft.com
  2. Bobアカウントのパスワードリセットを要求しますJim
  3. Bobルーム641AでNSAのために働きます。
  4. Bob彼のグローバルインターネットスニファを使用してHASH(HASH(jim's password))、プレーンテキストでに電子メールで送信されたとおりに取得しjimjones@microsoft.comます。
  5. Bob現在、分散型GPGPUファームを介してブルートフォース攻撃を実行し、Jimのパスワードを回復します。

シナリオ1と2のバリエーションは常に発生しますが(ハッシュとパスワードの強度によって異なります)、3についてはよくわかりません。要点は、メソッドが不要な情報を漏らし、実際に攻撃者をユーザーに悪用する可能性があるということです。 。

ユーザーのパスワードとは関係のないランダムに生成されたトークンを使用することをお勧めします。

于 2010-05-03T03:36:37.620 に答える
0

非常にまれなケースですが、ランダムなソルトを連結した後でも、2人のユーザーが同じハッシュパスワードを持っていたとします。問題がありますよね?パスワードのリセットリンクにuser_idのメールやハシッドを追加しても問題ないと思います。

于 2016-06-28T14:02:27.537 に答える
0

この問題を通過したばかりで、アイデアがあります。

1)ユーザーアカウントに関する情報を含むJWT(Json Web Token)を発行します。トークンには有効期限があり、たとえば1時間です。

2)トークンを電子メール/リンクでユーザーに送信します

3)ユーザーがリンクをクリックすると、トークンがサーバーエンドポイントに送信され、トークンが検証されます。有効な場合は、トークンを解凍してユーザーアカウントを更新します

このアプローチに欠陥はありますか?データベースは変更されません(必要に応じて新しいユーザーパスワードを除く)

于 2017-02-13T09:15:08.513 に答える