web-dev-qa-db-ja.com

パスワードを忘れた場合:パスワードを忘れた場合の機能を実装するための最良の方法は何ですか?

ウェブサイトでパスワードを忘れた場合の機能を作成するための最良の方法は何でしょうか。私はそこにかなりの数を見てきました、ここにいくつかまたは組み合わせがあります:

  • パスフレーズの質問/回答(1つ以上)
  • 新しいパスワードでメールを送信する
  • 画面に新しいパスワードを入力します
  • メールによる確認:新しいパスワードを取得するには、リンクをクリックする必要があります
  • ユーザーに新しいパスワードの入力を要求するページ

パスワードを忘れた場合の機能に、どのような組み合わせまたは追加の手順を追加しますか?彼らがどのようにして新しいパスワードを要求し、どのようにしてそれを取得するのか疑問に思っています。

パスワードを取得できないというプリンシパルを操作しています。新しいパスワードを指定/生成する必要があります。

編集ユーザー名が存在する場合は表示しないというCoryの発言は気に入っていますが、代わりに何を表示するのか疑問に思っています。問題の半分は、ユーザーが使用したメールアドレスを忘れてしまったことだと思います。これは、ある種の「存在しません」というメッセージを表示すると便利です。解決策はありますか?

51
Darryl Hein
  1. 私は個人的に、新しいパスワードを設定できる短期ページへのリンクを記載したメールを送信します。ページ名をある種のUIDにします。
  2. それが気に入らない場合は、新しいパスワードを送信し、最初のアクセス時にパスワードを変更するように強制することもできます。

オプション1ははるかに簡単です。

46
Gregor Brandt

いくつかの重要なセキュリティ上の懸念:

  • パスフレーズの質問/回答は、通常、プロセスで最も弱いリンクになるため、実際にはセキュリティが低下します。多くの場合、パスワードよりも誰かの答えを推測する方が簡単です。特に、質問が慎重に選択されていない場合はそうです。
  • 電子メールがシステム内のユーザー名として機能すると仮定すると(これはさまざまな理由で一般的に推奨されます)、パスワードのリセット要求への応答は、有効なアカウントが見つかったかどうかを示すべきではありません。指定されたアドレスにパスワード要求の電子メールが送信されたことを単に記載する必要があります。どうして?電子メールが存在する/存在しないことを示す応答により、ハッカーは複数のパスワード要求を送信し(通常、burp suiteなどのHTTPプロキシを介して)、電子メールが見つかったかどうかを記録することにより、ユーザーアカウントのリストを収集できます。ログインハーベスティングから保護するには、ログイン/認証関連の機能が、ログイン/パスリセットフォームに有効なユーザーの電子メールがいつ入力されたかを示すものがないことを確認する必要があります。

詳細については、 Webアプリケーションハッカーハンドブック を確認してください。これは、安全な認証モデルの作成に関する優れた読み物です。

[〜#〜]編集[〜#〜]:編集の質問について-私は提案します:

「指定したアドレスにパスワードリクエストメールが送信されました。メールがすぐに届かない場合は、スパムフォルダを確認してください。メールが届かない場合は、指定したメールのアカウントがありません。」

ここでは、使いやすさとセキュリティの間でトレードオフが行われています。コンテキストに基づいてこれのバランスを取る必要があります-セキュリティは、この不便を正当化するためにあなたとあなたのユーザーにとって十分に重要ですか?

25
Cory House

新しいパスワードでメールを送信します。

到着時にパスワードを強制的に変更し、新しいパスワードを入力します。

これにより、パスワードを必要とする人だけがアカウントにアクセスできるようになります。

電子メールが盗聴された場合、誰かがアカウントに侵入する可能性がありますが(もちろん)、実際の関係者はすぐにこれを発見します(送信したばかりのパスワードは機能しないため)。

また、パスワード変更の確認をユーザーに送信します。

誰かが新しいパスワードを取得し、「パスワードを変更してくれてありがとう」というメールを受け取った場合、彼らはかなり戸惑い、それをしなかった場合は管理者に相談します。

8
Will Hartung

電子メールの確認/パスワードのリセットリンクを使用すると、セキュリティが向上します。これを見てみると、ほとんどのWebサイトがそれを行っており、人々はこの検証にかなり慣れているので、このタイプの認証を使用することをお勧めします。

2
Brock Woolf

(gbrandtの)オプション2は、ユーザーが既に持っている個人情報と組み合わせると、優れた方法になると思います。つまり、生年月日です。

ユーザーが自分の電子メールアドレスを入力して新しいパスワード(リセット)を要求する場合、パスワードがリセットされて新しいパスワードがユーザーに電子メールで送信される前に、正しい生年月日(またはその他の日付)も入力する必要があります。

彼をよく知っている人だけが、彼のパスワードをリセットすることで彼を悩ませることができるでしょう!見知らぬ人やボットになることはできません

5つまたは7つの間違った電子メールアドレスと生年月日の組み合わせで、ユーザーはパスワードのリセットが要求され、資格情報が正しくないために失敗したことを電子メールで送信されます。その後、そのアカウントのパスワードのリセットは24時間または任意の期間停止されます。

(このメールに関してあまりにも多くのユーザーがwebadminに連絡すると、誰かがあなたのWebサイト/アプリから悪意を持って情報を取得しようとしていることがわかります)

皆さんはどう思いますか?

1
Auero

オプション1はnot良い考えです。一般的に、彼は他の人が簡単に推測できるようになるからです。サラペイリンの個人的な電子メール(Yahooだと思います)は、この方法で第三者によってハッキングされました。

他のオプションの方が優れており、以前の投稿で詳細を概説しています。

0
Jayden