web-dev-qa-db-ja.com

どのタイプのパスワードリセット/パスワードを忘れた(検証)メカニズムをお勧めしますか

パスワードをリセットするためにユーザーを確認する方法を探しています。一般的に使用される2つ:

  • メール確認
  • 秘密の質問

どちらをお勧めしますか?私は電子メールをまったく使用する必要がないようにしています(ユーザーは電子メールを提供する必要がないため、ほとんどのホストは送信される電子メールを制限しています)。しかし、秘密の質問だけでは少し安全ではないようです。どう思いますか?

7
Jiew Meng

個人的に、秘密の質問は私をとても困らせます。定義済みの質問は非常に簡単なため、誰かが単にグーグル検索したり、答えを推測したりできます。または、質問が曖昧で正しい答えがわからないので、偽の答えを出します(本当にパスワードを回復しようとすると問題が発生します)...本当に先生の名前を思い出せません1年生!

さらに悪いことに、ユーザーが自分の質問を定義して答えるようにすると、彼らは本当に、非常に馬鹿なことをします(質問にパスワードを入れるなど!)。

14
Martin

ほとんどのアプリケーションではメールの検証で十分です

完璧ではないかもしれませんが、ほとんどの人はこの種のアプローチを期待して受け入れています。全体として、良いプロセスは次のとおりです

  1. ユーザーが[パスワードを忘れた]をクリックした
  2. システムはワンタイムトークン(UUID)を生成し、それをデータベースに保存して新しいものとしてマークします
  3. ユーザーのメールアカウントに送信されたUUIDを含むHTTPSパスワードリセットリンクを含むメール。これは、以前に共有した秘密情報ではなく、電子メールアカウントへのアクセスによってユーザーが認証されることを前提としているため、弱点です。
  4. ユーザーがリンクをクリックすると、システムはUUIDが未使用であることを確認します
  5. すべてが順調であると仮定すると、ユーザーはパスワードリセットプロセスを実行されます。このプロセスでは、最初にUUIDを使用済みとしてマークし、次にパスワードの更新を受け入れます。
  6. パスワードはソルト処理されてハッシュされ、データベースに保存されます。パスワードの平文バージョンは永続化されません。 今まで

貴重なデータ?

保護しようとしているデータの価値がはるかに高い場合(納税申告書、銀行の詳細など)、より厳密な暗黙の承認プロセスが必要です(前のステップ3を参照)。これは通常、UUIDを含む文字の形式です(通常は改ざん防止エンベロープ内に隠されています)。次に、ユーザーはパスワードリセットプロセスをアクティブにし、UUIDを手動で入力する必要があります。

極端なデータ

最後に、上記では不十分な場合は、ID管理の領域に入ります。住所証明、運転免許証、パスポート、出生証明書、個人情報、およびユーザーが本人であることを合理的な疑いを超えて証明するために必要なその他すべてのフリッピーを公開します。次に、ステップ5に進みます。

12
Gary Rowe

地球のために、秘密の質問を使用しないでください。一週間で、私は通常、一年でそこに答えることができなかったかもしれないことを知りません。

メールの確認は問題なく行われます。

また、電子メールごとにプレーンテキストでパスワードを送信しないでください。パスワードは決して保存せず、そのハッシュを保存してください。

6
user8685

メール確認を使用します。

秘密の質問のアプローチには複数の問題があります。
答えを忘れた可能性があります
私は答えを別の綴りで書いたでしょう(先頭に大文字のWordがあり、そのプログラマはequalsIgnorecaseを忘れていたでしょう)。

実際の問題は、ユーザーがパスワードを忘れたことです。そして、秘密の質問のアプローチは、彼が何かを忘れたので、彼に他の4つのことを覚えてほしいと思っています。

多くのユーザーは、将来の参考のために質問の回答画面のスクリーンショットを撮ることになります-パスワードのまさに目的が失われます。

0
Nivas