多くのウェブアプリケーションでは、メールは一意のフィールドである必要があります。ユーザーのメールがデータベースにすでに存在している場合、ユーザーはアカウントを登録できません。
登録フォームで検証を実行するときは、おそらく電子メールが受信されたかどうかを確認し、ユーザーが別の電子メールを選択するか、パスワードを再設定することができるため、電子メールが受信されたかどうかを通知します。
ただし、このフィードバックを提供している場合、悪意のあるユーザーがユーザーがデータベースに存在するかどうかをテストする可能性があります。誰かがビッグハックからの漏洩データに対してサイトをもっともらしくテストする可能性があり、ユーザーがサイト間でパスワードを再利用している場合、サイトは潜在的に脆弱です。
これに対する解決策は、特に電子メールについて言及せずに、何がうまくいかなかったかについてより一般的なフィードバックを提供することですが、それはサインアップしようとしている平均的なユーザーにとって苛立たしいかもしれません。また、サインアップフォームに電子メールとパスワードが必要なだけの場合でも、エラーが発生した場合は、電子メールがデータベースに既に存在している可能性が高いことは明らかです。
セキュリティの観点から、登録時に電子メールが既に取得されていることをユーザーに通知するための最良の方法は何ですか?
直感的で簡単な解決策は、自動化されたスクリプト(悪意のあるスクリプト)が、どのメールが登録されているかを把握するために、メールのリストに登録しようとしないようにすることです。たとえば、CAPTCHAチャレンジを登録の一部として使用して、アカウントを登録しようとしているのが人間であることを確認します。このように、ユーザーの電子メールがほとんど試行されなくても、膨大な数をチェックすることはできません。強力なCAPTCHAは簡単に壊れないものと想定しています。
ただし、非常に機密性が高く、ターゲットWebサイトに登録されているユーザーを人間のユーザーからも隠す必要がある場合は、登録を終了し、電子メールが既に登録されているというエラーメッセージをユーザーに表示しないでください。そして、プロセスの最後に、電子メールが自分のものであることを確認する必要があることをユーザーに通知します。電子メールをチェックしてください。バックエンドで、電子メールがすでに登録されている場合は何もしません。電子メールの所有者に電子メールを送信して通知するだけです:私たちのサービスに再登録しようとしたようです、私たちのアカウントを忘れてしまった場合は、これがユーザー名です。パスワードを覚えて、パスワードリセットページに移動します。安全のため、再度登録を行わなかった場合は、このメールを無視してください。
電子メールがデータベースに登録されていない場合は、バックエンドで、URLにランダムな1回限りのトークンを作成し、登録された新しい電子メールに送信して、新しいアカウントを作成するつもりかどうかを確認するように依頼します。新しいアカウント。
このようにして、すべてを悪者から完全に隠します。
これが懸念される場合(つまり、個人のメンバーシップの事実が機密情報と見なされる場合)、1つの解決策は、登録ページのユーザーの観点から通常は登録を処理することですが、別の電子メールを送信して、アカウントを確認するための確認メールではなく、アカウントが既に存在するか、既存のアカウントのリセット(または該当する場合はアカウントを置き換える)の詳細が提供されます。