54

重複の可能性:
パスワードを忘れた: パスワードを忘れた機能を実装する最良の方法は何ですか?

コミュニティ Web サイトをプログラミングしています。

「パスワードを忘れた」機能を構築したい。

さまざまなサイトを見回してみると、次の3 つのオプションのいずれかが採用されていることがわかりました。

  1. パスワードを変更できる固有の非表示 URL へのリンクが記載されたメールをユーザーに送信します (Gmail および Amazon)。

  2. ランダムに生成された新しいパスワードを記載したメールをユーザーに送信します(Wordpress)

  3. ユーザーに現在のパスワードを送信します(www.teach12.com)

オプション #3はユーザーにとって最も便利に思えますが、私はパスワードを MD5 ハッシュとして保存しているため、 MD5 は元に戻せないため、オプション #3 をどのように使用できるかわかりません。これは、Web サイトがパスワードを平文でどこかに保存している必要があり、少なくとも平文のパスワードが安全でない電子メールでユーザーに送信されていることを意味するため、安全でないオプションのようです。それとも、ここで何か不足していますか?

したがって、オプション 1 を実行できない場合は、ユーザーのパスワードを変更してユーザーに送信するだけでよいため、オプション 2最も簡単にプログラムできます。安全でない電子メールを介して通信されるライブパスワードを持っている必要があるため、これはやや安全ではありません. ただし、これはトラブルメーカーによって悪用され、無作為に電子メールを入力したり、さまざまなユーザーのパスワードを絶えず変更したりして、ユーザーを悩ませる可能性もあります。

オプション #1が最も安全に思えますが、有効期限が切れる隠し URL などを処理するために少し余分なプログラミングが必要ですが、大規模なサイトが使用しているようです.

これらのさまざまなオプションを使用/プログラミングした経験はありますか? 見逃したオプションはありますか?

4

17 に答える 17

33

4) 銀行口座に 2 つのランダムな金額を入金し、それらを入力するように依頼します。
5) カタツムリが新しいパスワードを郵送し、入力するように依頼します
。ファイルに登録した携帯電話の番号。
7) パスワード管理の問題を、Stack Overflow、Facebook、ブログ エンジンなどの OpenID プロバイダーにアウトソーシングすることで完全に解決します。

これら以外では、オプション #1 または #2 を使用して、両方とも 1 時間で有効期限が切れる追加機能を使用します。

于 2009-05-23T14:45:21.667 に答える
9

#1と#2が同等であると説明する回答に対する賛成票にショックを受けました。それらはまったくありません。パスワードを変更するための短期間のリンクをユーザーに送信することは、帯域外のやり取り (メール、テキスト メッセージなど) を伴わない、最も便利で、最も一般的に使用され、最も安全な方法です。いくつかの理由:

  1. パスワードを忘れた場合のリンクを介して一時パスワードを設定すると、ユーザーはユーザーのパスワードを効果的に変更し、ユーザーのログインを知っている場合にユーザーをアカウントからロックアウトできます。リンクがあれば、ユーザーは誰かがいたずらしていることを簡単に知ることができ、そのアクセスは影響を受けません。
  2. パスワード リセット リンクは短期間しか有効ではないため、攻撃者が攻撃できる時間はごくわずかです。また、攻撃者がリンクを傍受し、それを使用してパスワードを変更した場合、リセット リンクが機能しなくなるため、ユーザーはそれを知ることができます。新しく割り当てられたパスワードがユーザーによってすぐに変更されない場合、パスワードを傍受した攻撃者は、密かにユーザーになりすますことができます。したがって、大きな違いは、ハッカーがパスワード リセット リンクの電子メールを傍受できる一方で、リンクを使用してユーザーのパスワードを変更すると、リンクが機能せず、別のパスワード リセットが生成されるため、ユーザーは何かがおかしいことに気付くことです。リクエスト。
  3. より使いやすく - ユーザーは、生成した新しいランダム パスワードを入力するのではなく、電子メール内のリンクをクリックするだけです。

また、セキュリティに関する質問は、多くの場合、サイトの安全性を低下させますが、それ以上にはなりません。それらは別の攻撃ベクトルであり、多くの場合、最も脆弱なリンクです。このトピックに関する優れた議論については、The Web Application Hacker's Handbookを読むことを強くお勧めします。

于 2010-08-04T17:00:50.030 に答える
8

オプション #2 では、古いパスワードを追跡し、新しいランダム パスワードが 24 時間以内に使用されない場合は期限切れになることにも注意してください。

そうしないと、新しいランダムなパスワードを繰り返し発行して迷惑をかける可能性があります。電子メールの近くにいないと、通常のパスワードでログインできない理由がわからない可能性があります。

また、「識別用の質問」を要求することは避けてください。これらの質問に対する答えは、通常、実際のパスワードよりも推測/検索がはるかに簡単です。これがいかに安全でないかを示す最近の例については、 Sarah Palinの記事を参照してください。

于 2009-05-23T14:48:19.540 に答える
6

オプション 1 と 2 は、互いに同じくらい安全ではありません。

そこには。私はそれを言った。ユーザーの電子メール アカウントが侵害された場合、住所、母親の旧姓などの個人データ (すべて推測可能) を収集しない限り、合理的な安全な方法はありません。

私が見た最高の (最も厄介な) バージョンは、秘密の質問秘密の答えを覚えておく必要がある場合です。これは、ユーザーがどの質問をしたかを覚えておく必要があることを意味します。もちろん、いつでも忘れることができます!

彼らが質問を忘れて、あなたが「本物の」会社である場合、すべてのセキュリティをリセットする方法についての指示とともに、投稿を通じてユーザーにトークンを送信するオプションが常にあります... ハッカーがアクセスできる可能性は非常に低いです.彼らの実生活のメールに。

ユーザーがアカウントを作成したときに電話番号を収集することです。それが存在し、彼らが詳細を思い出せない場合は、詳細をリセットする方法を彼らに伝える、ある種の自動呼び出しシステムをセットアップできます.

#2について言及する1つのこと:プロセスが現在のアカウントのパスワードを上書きしないようにしてください。それが起こった場合、誰かがアカウントのパスワードを忘れたと言うことができ、多くの不要なパスワードの変更がトリガーされます.

于 2009-05-23T14:57:34.763 に答える
4

オプション 1 と 2 のセキュリティに実質的な違いはありません。オプション 1 は、新しいパスワードをフォームにプリロードすることと事実上同じです。

実際、フィッシング攻撃が蔓延しているため、長い URL でオプション 1 の使用を奨励することで、長い謎の URL をクリックすることに対する人々の注意力が低下する可能性があると主張することができます。

于 2009-05-23T14:45:18.157 に答える
4

OWASP のトップ 10を読んで、メソッドが準拠していることを確認してください。

直リンクはこちら。

于 2009-05-23T14:47:03.940 に答える
4

特にあなたの質問に関してではない何かについての簡単なメモ。MD5を使用して保存されたパスワードをハッシュしたと述べました。オプション 1 と 2 のどちらを使用するかに関係なく (3 は、明らかな理由から、最も安全性が低くなります)、MD5 はクラックされたハッシュ アルゴリズムであり、実際には、ハッカーが保護されたアカウントに簡単にアクセスできるようにする可能性があります。 MD5 ハッシュ。

脆弱性の詳細については、次の URL を参照してください: en.wikipedia.org/wiki/MD5

より良いハッシュ ソリューションは、安定した安全なハッシュ アルゴリズムである SHA のようなものです。オプション #1 または #2 と組み合わせて、最も断固たるハッカー以外を排除して、ユーザーのパスワードを保護するための適度に安全なシステムを配置する必要があります。

于 2009-05-23T16:49:01.523 に答える
2

オプション #1 には、#2 よりもいくつかの大きな利点があります。ランダムなユーザーが私のメール アドレスを [パスワードを忘れました] ボックスに入力すると、パスワードはリセットされません。また、Gmail の受信ボックスに永久に保存されるサイトのパスワードの永続的な記録がないという点で、少し安全です。

ここで欠けている重要な部分は、#1 で指定したリンクが1 回のパスワード リセットに対してのみ機能し、時間制限があることです。

これらのソリューションはすべて、メールの受信トレイをすべてを支配する「1 つのリング」として扱っていることを意味します。いずれにせよ、ほとんどのオンライン サービスは現在これを行っているようです。

私が好むアプローチは、可能であれば openid を使用することです。パスワード管理は地獄であり、誰も正しく理解しているようには見えません。この問題を他の人に渡す方が簡単です。

于 2009-05-23T20:24:44.817 に答える
2

オプション #1 がおそらく最適です。#3 は安全ではありません (また、SHA1 など、MD5 よりも強力なものを使用することをお勧めします)。オプション #2 は、セキュリティの質問を使用しない限り、電子メールをチェックするまでランダムな人があなたのアカウントをロックアウトする可能性があるため、適切ではありません。また、セキュリティの質問は、多くの場合、パスワードよりも簡単にクラックできます。

于 2009-05-23T14:54:07.653 に答える
1

オプション#3が安全ではないというあなたのコメントに同意します.

#1 または #2 のプログラミングに関しては、オプション #2 の方がプログラミングが簡単ですが、#1 はそれほど難しくなく、おそらくどちらもほぼ同じくらい安全です。

どちらのオプションを選択する場合でも、パスワードを忘れた場合のプロセスの一部として、個人情報の要求 (登録時に取得する) を含めることで、より安全にすることを検討することもできます。

ユーザー名があり、新しいパスワードを取得するには、ユーザー名とメール アドレスの両方を入力する必要があるシステムをプログラムしました。ユーザー名のリマインダーを受け取ることができますが、主なポイントは、おそらく誰かがあなたのユーザー名とメールアドレスを推測できないということですが、メールだけで行うと安全性が低下します.

秘密の質問は、個人情報部分へのアプローチです。個人的には、多くの人が答えを知っているか、推測できるか、見つけられるかのいずれかである質問を選択する傾向があるため、それらはあまり価値がないと思います. ただし、すでに比較的安全な方法と組み合わせて使用​​する限り、何もないよりはましです。

明らかに、これを行うほど、より多くのプログラミング作業が必要になります。

最も簡単な方法は次のとおりです。

  1. 「ユーザー名を通知する」リンクを用意します (メールアドレスを入力してください)。電子メールが送信されたかどうかをユーザーに伝えないでください。これを使用して、電子メール アドレスがメンバーのものであるかどうかを知ることができます。リマインダー メールの受信トレイを確認するように常にユーザーに伝えますが、誰かがメンバーである場合にのみ送信します。と
  2. 新しいワンタイム パスワードを送信するには、ユーザー名と電子メールの両方を要求します。そのパスワードは 1 時間程度しか有効ではありません。ユーザーがそれを使用するときは、すぐにパスワードを変更するよう強制する必要があります。
于 2009-05-23T14:48:12.753 に答える
1

オプション 4: アカウント名と電子メール アドレスを入力してパスワードをリセットするようユーザーに要求します。サイトで本名やメール アドレスを公開しない限り (この時代になぜ公開する必要があるのでしょうか?)、これはかなり安全で改ざん防止の方法です。パスワード自体ではなく、リセット ページへのリンクを送信します。

オプション 5: OpenIDを使用し、サードパーティに責任を負わせて心配する。

正直なところ、これはほとんどのサイトが必要とするよりもはるかに多くの労力です. 私は平文のパスワードを受信箱の「登録」フォルダに保存しているので、電子メールで平文のパスワードを受け取るのが好きです。そうすれば、サイトのパスワードを忘れたときに検索できます (これはよくあることです!)。誰かが私のメールを読んでいる場合、私の Twitter アカウントを使用している人々よりも大きな問題を抱えています (もし私がアカウントを持っていたとしても)。もちろん、銀行や企業にはより厳しい要件がありますが、サイトが何であるかを指定していません。それがベストアンサーの鍵です。

于 2009-05-23T15:11:03.487 に答える
0

私は本当に満足していないいくつかの方法を試しました。次のプロジェクトのために私が決めたのは次のとおりです。

  1. ユーザーがユーザー名とメールアドレスを入力します
  2. 48時間の有効期限でdbに保存されたurlとguidパラメータを含むリンクで送信された電子メール
  3. ユーザーがパスワードをリセットすることを確認します
  4. 新しいパスワードがユーザーに電子メールで送信されます
  5. 新しいパスワードでログインすると、メッセージが表示されるか、パスワードの変更ページにリダイレクトされます。
于 2010-07-01T21:21:52.253 に答える
0

ユーザーに個人的にオフィスに来て、ID カードまたはパスポートで身元を証明するように指示します。

もちろん、これは、ユーザーの近くにオフィスがあり、アカウントがこの手順を正当化するのに十分な価値があることを前提としています。銀行などに適しています。

于 2010-08-19T08:49:09.790 に答える
0

オプション1または2のどちらでも問題ありません。あなたが言ったように、クリアテキストのパスワードを保存する必要があるため、オプション 3 は安全ではありません。おそらく、パスワードを格納/取得するために可逆暗号化アルゴリズムを使用することもできますが、より優れた代替手段を利用できるため、その道をたどる理由はありません。

于 2009-05-23T14:48:35.467 に答える
0

言及したオプションのいずれかと組み合わせて使用​​できる追加のオプションがあります。

パスワードを忘れた場合の最初のステップとして、ユーザーにパスワードのリマインダーを作成させることができます。リマインダーが役に立たない場合は、次のオプションに進むことができます。

リマインダーはパスワードそのものではないため、メールで送信しても安全です (または、ページに直接表示することもできます)。

于 2009-05-23T14:50:20.407 に答える
0

それらをハッシュしている場合、オプション 3 は使用できません。ハッシュしていない場合は、恥をかいてください。:)

私はオプション 1 を好みます。メールに送信されたパスワードのリセット リンクを送信して、(限られた時間だけ) パスワードをリセットできるようにします。より多くの作業が必要ですが、使いやすく、最終的には電子メールのログイン プロセスと同じくらい安全です。

于 2009-05-23T14:51:21.967 に答える
0

#1 と #2 を組み合わせて、両方の利点を活かすことができます。

ランダムに生成された新しいパスワードを変更できる、固有の隠し URL へのリンクが記載された電子メールをユーザーに送信します。

そのページは SSL である可能性があり、パスワードは 12 ~ 24 時間で期限切れになる可能性があります。

于 2009-05-23T15:01:42.007 に答える