パスワードをお忘れですか:パスワードを忘れた場合の機能を実装する最良の方法は何ですか?
-
22-08-2019 - |
質問
Web サイトにパスワードを忘れた場合の機能を作成する最適な方法は何だろうと考えています。私はそこにかなりの数を見てきましたが、ここではいくつか、またはそれらの組み合わせを紹介します。
- パスフレーズの質問/回答 (1 つ以上)
- 新しいパスワードを記載したメールを送信する
- 画面上で新しいパスワードを入力してください
- 電子メールによる確認:新しいパスワードを取得するにはリンクをクリックする必要があります
- ユーザーに新しいパスワードの入力を求めるページ
パスワードを忘れた場合の機能にどのような組み合わせまたは追加の手順を追加しますか?彼らがどのようにして新しいパスワードを要求し、どのようにしてそれを取得するのか気になります。
パスワードを取得できないという原則に基づいて操作しています。新しいパスワードを指定または生成する必要があります。
編集 ユーザー名が存在する場合は表示しないという Cory のコメントは気に入っていますが、代わりに何を表示するか迷っています。問題の半分は、ユーザーが使用した電子メール アドレスを忘れてしまったことにあると考えています。その場合、ある種の「存在しません」メッセージを表示すると便利です。何か解決策はありますか?
解決
- 私なら、新しいパスワードを設定できる短期ページへのリンクを電子メールで送信します。ページ名を何らかの UID にします。
- それが気に入らない場合は、新しいパスワードを送信し、最初のアクセス時に変更を強制することもできます。
オプション 1 の方がはるかに簡単です。
他のヒント
セキュリティ上の重要な懸念事項がいくつかあります。
- パスフレーズの質問/回答は、通常、プロセス内で最も弱いリンクになるため、実際にはセキュリティを低下させます。多くの場合、特に質問が慎重に選ばれていない場合、パスワードよりも誰かの答えを推測する方が簡単です。
- システム内で電子メールがユーザー名として機能すると仮定すると (さまざまな理由からこれが一般的に推奨されます)、パスワード リセット要求に対する応答には、有効なアカウントが見つかったかどうかが示されるべきではありません。パスワード要求メールが指定されたアドレスに送信されたことだけを記載する必要があります。なぜ?電子メールが存在する/存在しないことを示す応答により、ハッカーは複数のパスワード要求を (通常は burp スイートなどの HTTP プロキシ経由で) 送信し、電子メールが見つかるかどうかを記録することでユーザー アカウントのリストを収集できます。ログイン収集から保護するには、ログイン/認証関連機能が、有効なユーザーの電子メールがログイン/パス リセット フォームに入力されたことを示すものがないことを保証する必要があります。
詳しい背景については、以下をご覧ください。 Web アプリケーション ハッカー ハンドブック. 。安全な認証モデルの作成に関する優れた書籍です。
編集:編集内の質問については、次のように提案します。
「パスワードリクエストメールが提供されたアドレスに送信されました。メールがまもなく届かない場合は、スパムフォルダーを確認してください。メールが届かない場合、提供されたメールにはアカウントが存在しません。」
ここでは、使いやすさとセキュリティの間でトレードオフが行われます。コンテキストに基づいてバランスをとる必要があります。セキュリティは、この不便さを正当化するほど、あなたとあなたのユーザーにとって重要ですか?
新しいパスワードを使用して電子メールを送信します。
彼らが到着し、新しいパスワードの重要な時にパスワードの変更を強制します。
このパスワードを望んでいた人のみが唯一のアカウントに取得されることを保証する。
電子メールが盗聴されている場合は、、誰かが(もちろん)アカウントに得ることができるが、実際のパーティーは(自分のパスワードとして、あなただけの彼らは動作しません送信され)、すぐにこれを発見するでしょう。
また、ユーザーにパスワード変更の確認を送っています。
誰かが新しいパスワードを取得し、あれば、彼らはかなり困惑することになるだろうと、彼らはそれをしなかった場合は管理者に話をします。「パスワードを変更するためのありがとう」を言って、電子メール
メールの確認/パスワードリセットのリンクを使用すると、あなたの優れたセキュリティを提供します。 あなたはこの周りを見れば、ほとんどのウェブサイトはそれを行うと、人々はかなりこの検証に使用されているので、私はこのタイプの認証を使用することをお勧めしたい方法です。
私はそれはあなたがすでにユーザーのために持っているいくつかの個人情報と組み合わされている場合(gbrandt代)オプション2は偉大な方法であると思うだろう。誕生すなわち日付ます。
ユーザーが自分のメールアドレスを入力経由で新しいパスワードを(リセット)要求するとパスワードがリセットされ、新しいものがユーザーに電子メールで送信される前に、、彼はまた、出産(または何か他)の正しい日付を入力する必要があります。
だけ彼をよく知っている人は、おそらく自分のパスワードをリセットすることによって、彼を困らせることができます!それは、見知らぬ人やボットもカント
出産の組み合わせの5または7悪いのメールアドレス&日付時にユーザーが自分のパスワードをリセットするように要求されたと誤った資格に失敗したことを電子メールで送信されます。そして、そのアカウントのパスワードのリセットが24時間または任意の期間のために中断されます。
(あまりにも多くのユーザーがこのメールについてのWebAdminに連絡した場合、彼は、誰かが悪意を持って、あなたのウェブサイト/アプリからの情報を達成しようとしている知っているよ)
皆さんはどう思いますか?
オプション1.一般的に、彼は他の人が簡単に推測可能になると、 にはない良いアイデアです。サラ・ペイリンの個人的な電子メールは(ヤフー私は思う)第三者が、この方法でハッキングされました。
他のオプションが優れていると、以前の記事では、詳細を概説している。
の私が考えていたアイデアは、ユーザーに送信されたリンクでデータに署名することでした。ユーザーがリンクをクリックし、サーバーがコールを受信したときに続いて、サーバーは、暗号化された部分を取得したデータはそのままだったことを検証することができます。の
私はこのユースケースのためのJavaプロジェクトを実施しています。これは、GitHubの、オープンソースです。それはあなたの質問は完全に... Javaで実装答えます。
は、の電子メールでのリンクについて - 。それは、リンクを生成し、プラスの使用時に、それを検証します。
すべての説明がある(何かが欠落している場合と - 私に知らせて...)
見てください: https://github.com/OhadR/Authentication-Flowsする
デモここを参照してください。
これは、すべての説明とREADMEで、AUTH-フローを使用するクライアントのWebアプリです。それはあなたの実装を指示します。 https://github.com/OhadR/ OAuth2-サンプル/木/マスター/認証フローの