53

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

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

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

パスワードを取得できないという原則に基づいて操作しています。新しいパスワードを指定/生成する必要があります。

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

4

7 に答える 7

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

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

于 2009-02-07T02:15:52.813 に答える
25

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

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

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

編集:あなたの編集の質問に関して-私は提案します:

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

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

于 2009-02-07T04:44:16.523 に答える
8

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

彼らが到着したときにパスワードの変更を強制し、新しいパスワードを入力します。

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

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

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

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

于 2009-02-07T02:15:38.150 に答える
2

メール認証/パスワード リセット リンクを使用すると、セキュリティが強化されます。これはほとんどの Web サイトで行われている方法であり、人々はこの検証にかなり慣れているため、このタイプの認証を使用することをお勧めします。

于 2009-02-07T02:25:21.890 に答える
1

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

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

彼をよく知っている人だけが、パスワードをリセットして彼を困らせることができます! 見知らぬ人でもボットでもない

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

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

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

于 2010-08-31T18:43:28.040 に答える
0

オプション 1. は、一般的に他の人が簡単に推測できるようになるため、良い考えではありません。Sarah Palin の個人的な電子メール (Yahoo だと思います) は、第三者によってこの方法でハッキングされました。

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

于 2009-02-07T02:24:46.400 に答える
-1

私が考えていたアイデアは、ユーザーに送信されるリンク内のデータに署名することでした。次に、ユーザーがリンクをクリックしてサーバーが呼び出しを受信すると、サーバーは暗号化された部分も取得し、データが変更されていないことを検証できます。

このユースケースのために Java プロジェクトを実装しました。GitHub、オープンソースにあります。それはあなたの質問に完全に答えます... Javaで実装されています。

電子メールのリンクについては、リンクを生成し、使用時に検証します。

すべての説明があります(何かが欠けている場合はお知らせください...)

ご覧ください: https://github.com/OhadR/Authentication-Flows

ここでデモをご覧ください。

これは、auth-flows を使用するクライアント Web アプリで、README にすべての説明が含まれています。実装を指示します: https://github.com/OhadR/authentication-flows/tree/master/authentication-flows

于 2014-01-19T15:05:53.893 に答える