そのため、パスワードを忘れた場合のリンクをクリックしてメールアドレスを入力すると、サイト(および私が話を聞いた他のプログラマー)は2つの考え方のうちの1つであるように見えます。
私は後者を自分で実装しましたが、一般にそれが原因でユーザーに不快感を与えたことがわかりました。
最後に、2番目のシナリオを使用する人気のあるWebサイトを調査したところ、入力した電子メールアドレスが既存のアカウントと一致するこれらのサイトにアカウントを登録しようとすると、「この電子メールアドレスはすでに使用されているか、利用できない」タイプであることがわかりましたとにかくメッセージが表示されます。
このように、パスワードリセットメールがアカウントと一致したかどうかを明らかにしない利点は何ですか?また、登録でメールの一致を明らかにする必要がある場合、これらの利点はどのように役立ちますか?
セキュリティと使いやすさの間にはトレードオフがある場合があります。
他の人が自分がサイトを使用していることを知らないことがあなたやユーザーにとって重要な場合は、2番目の選択肢が最適です。
「誰かがこのアドレスのパスワードのリセットを要求したが、私たちのシステムにはない」のように、システムに存在しないアドレスにいつでもメールを送信できます。これで2番目の苦情が処理されます。
確認ページでパスワードのリセットをやり直すためのリンクを追加します。うまくいけば、次回はメールを正しく入力できます。
したがって、ユーザーの列挙を回避することが、誤って入力された電子メールアドレスよりも重要かどうかを判断します。
パスワードリセットのメールがアカウントと一致したかどうかを明らかにしない利点は何ですか
ユーザーのメールアドレスのリストを攻撃者に提供または確認したり、特定のユーザーがサイトを使用していることを他の人に知らせたりしないでください。それが子猫に関するサイトなら、誰が気にしますか?銀行や婚外関係のサイトの場合、これは重要です。
登録でメールの一致を明らかにする必要がある場合、これらはどのように役立ちますか?
登録にはこれが必要だと誰が言いますか?登録も同様です。メールアドレスをリクエストする、「ステップ2」リンクを送信する、または「誰かが当サイトでの登録をリクエストしたが、このアドレスはすでに登録されている」メール。
したがって、簡単にアクセスできる方法でシステム上の電子メールの存在を確認または拒否した場合に、攻撃者が実際に何ができるかを検討する必要があることを私は入門書として推測します。これは可能なシナリオです:
この場合、データベースにあるすべての電子メールをパスワードリセット機能に対して単純に試し、返された結果を収集し、それらのいずれかが存在することを確認したら、それらの電子メールにログインして、パスワードリセットリンクをたどります。
サインアッププロセスをたどるのが簡単な場合は、パスワードのリセットが不透明であるためにセキュリティが強化されないと想定するのは正しいことです。パスワードリセットページではなく、サインアップページで前述の攻撃を簡単に実行できます。
これを軽減するために考えられるいくつかの方法は次のとおりです。
ただし、前述のとおり、これらはどちらも使いやすさに比較的大きな影響を与えます。いつものように、セキュリティは常に実用性と偏執狂の間のトレードオフです。
これまでの回答は良好ですが、プロファイリングの観点からは、アカウントにアクセスしなくてもかまいませんが、サービスを使用しているという知識は状況をソーシャルエンジニアリングするのに十分であることに注意することが重要です/潜在的なパスワード(ペット、子供、車など)のソーシャルフィードを監視します。
とは言っても、ユーザーのサインアップ中に、ユーザーに電子メールアドレスが既に使用されている場合とされていない場合があることをユーザーに説明するのは、不適切なUXの動き(または少なくとも地雷原)になるでしょう。アカウントを再作成して、「既にアカウントを持っているようです」とメールで送信するというファンキーなロジックを考え出すこともできますが、それは不格好であり、率直に言って、ユーザーにとっては時間の無駄です。同じことがログインページにも当てはまります。アカウントの有無にかかわらず「無効なユーザー/パス」は良い習慣です...しかし、登録ページが自由に情報を提供し、ユーザーがユーザーを不快に思う危険性がある場合登録しましたが、登録していません。
個人的には、このシナリオが発生しないように、Webベースのサービスで可能な限りOpenIDを使用するようにしています。最近、Google/Facebook/Twitterアカウントを持っています...