web-dev-qa-db-ja.com

メールアドレスが登録フォームから取得されないようにするにはどうすればよいですか?

Webサイトのログインフォームにアクセスし、間違った認証情報を入力すると、Webサイトから次の3つのエラーメッセージのいずれかが表示されることがあります。

  1. メールが間違っています

  2. パスワードが間違っています

  3. あなたの電子メールまたはパスワードが間違っています

私は read を使用すると、悪意のあるユーザーがログインフォームを使用してデータベースに既に存在するメールを見つけることができなくなるため、3番目のエラーメッセージのみを表示するのが最も安全です。その情報を大規模に知ることができれば、メールアドレスをスパマーに売り飛ばしたり、それらのユーザーとしてログインを試みたりすることができます。

ログインフォームに加えて、有効な電子メールを発見する一般的な方法が2つあります。

ウェブサイトのパスワードを忘れた場合のフォームを使用すると、メールアドレスを入力して、パスワードリセットリンクをメールアドレスに送信できます。フォームに存在しないメールを入力すると、Webサイトから次の2つのメッセージのいずれかが表示されます。

  1. そのメールは存在しません

  2. パスワードリセットリンクがメールアドレスに送信されました(存在する場合)

同じ理由で、ここでのセキュリティのベストプラクティスは、そのメールが存在しない場合でも2番目のメッセージのみを表示することです。

ユーザーアカウント登録フォームを使用すると、Webサイトに新しいアカウントを作成できます。メールアドレスやパスワードなど、いくつかの情報を入力する必要があります。

別のアカウントで既に使用されているメールアドレスでサインアップしようとすると、Webサイトはそのメールアドレスが既に使用されていることを通知します。

Stack Exchange を含む多くの大規模なWebサイトは、上記と同じ問題を引き起こしますが、そのようにします。

これが私の問題です、どちらもその問題に関連しています:

  1. 他のユーザーのメールアドレスを漏らさずにWebサイトでユーザーが登録できるようにするにはどうすればよいですか?

  2. 登録フォームにこの問題がある場合、ログインフォームとパスワードを忘れた場合のフォームを正しく処理するメリットはありますか?言い換えれば、すでに登録フォームから全員の電子メールアドレスを取得できる場合、他の2つのフォームの保護はエンドユーザーにとって無意味な迷惑ではないでしょうか。

12
Pikamander2

あなたが説明する電子メールの収集シナリオは本当に遅く、起こりそうにない、少なくとも多くの電子メールアドレスを収集する方法として。攻撃者は非常に長い文字列をフォームに対してブルートフォースする必要があります。 symcbeanですでに述べたように、電子メールを購入するとすでに非常に安価であり、誰かがこのフォームを繰り返し使用しようとすると、そのような試みをブロックするのはかなり簡単です

電子メールを収集する標準的な方法は、ドメイン(たとえば会社)に関連付けられたすべてのメールをすばやく収集するために theharvester のようなツールを使用することです。

password resetの場合、自分で質問の一部にすでに回答しているので、常に中立的なフィードバックを返し、必要に応じてブロックメカニズムを実装する必要があります。登録/リセットの試行回数が多すぎると、IPがブロックされます。

誰かが登録したい場合は、次のことができます:

  • まず彼の登録メールを求めます
  • メールに登録リンクを送信します
  • その後の登録プロセスは、リンクから続行されます

この方法では、メールがすでに登録されているかどうかを推測することはできません。

10
AdHominem

AdHominemは正しいです。電子メールの検証を使用すると、この攻撃経路を防ぐことができます。しかし、それはユーザビリティの課題です。多くのサイトにとって、正しい(しかし面倒な)方法は次のとおりだと思います。

  1. ユーザーがすべてのサインアッププロセスを完了し、低特権の一時アカウントでサイトの使用を開始できるようにします。アカウントに関連付けられているアクション(フォーラムへの投稿など)を実行しないようにする必要があります。
  2. メールアドレスが新しい場合は、メールを送信して、アカウントを確認し、そのメールにリンクできるようにします。
  3. メールアドレスがすでに登録されている場合は、リマインダー/パスワードのリセットリンクを送信し、既存のアカウントにアクセスする必要がある場合はそれをフォローするように伝えます。

これは、特に、ユーザーがロックを解除した後、ユーザーが既存のアカウントに再度割り当てることを望む可能性のあるアクションを一時アカウントに実行させる場合は、面倒になる可能性があります。最も簡単な方法は、ユーザーがメールアドレスを確認するまで何もしないようにすることです。しかし、メールクライアントに切り替えて数分待つことを強制するとサインアップ率が低下するため、多くのサイトがメール確認を繰り返し要求しますが、要求しません。

別の可能性としては、誰かが現在あなたに存在するメールアドレスでサインアップした場合、

  1. アカウントを作成し、要求された電子メールアドレスを使用するように表示しますが、実際にはそのアドレスにリンクしないでください(つまり、パスワードのリセットや電子メールによる通知に使用しないでください)。攻撃者はアドレスを確認できないため、違いを見分けることができません。
  2. 既存のアカウントのパスワードを再設定し、メールを受信できないアカウントが重複している場合の結果を知らせるための手順を記載して、そのアドレスにメールを送信します。
  3. それについて他に何もしないでください。

これらのシナリオでは、サイト管理者とユーザー間の連絡に電子メールのみを使用していると想定しています。一意性の適用や他のサイトユーザーに確認済みのメールアドレスを表示するなど、別の目的でそれらを使用している場合は、email-verification-firstアプローチを使用する必要があります。

1
octern

代わりに、登録済みの電子メールを漏らさずにログインフォームのユーザー名で使用し、アカウントへのログイン試行が失敗した場合にユーザーにアラートを送信して、接続したい人がいることを警告することができます...

そのような情報や手がかりを与えることは、攻撃者にとってブルートフォースを簡単にするだけです。たとえば、ウェブサイト(ワードプレスの場合はそれを見つけます)にログイン管理者と任意のパスワードを与えると、「パスワードが正しくありません」と答えます。管理者アカウントに対してブルートフォース攻撃を仕掛けることができました。

あなたがグーグルのように本当の理由を与えることなく、登録フォームのメールを変更することを求めることができる別の解決策。多くのユーザー名の例alice.bobが存在しない、または登録されていない場合でも、Mme Alice.Bobによって取得されたことを意味するわけではありません(何度もgmailとGoogleのユーザー名を尋ねます)私はそれが利用できず、sername125のようなものを提案し、メールまたはG +を送信して確認した場合、それらを見つけることができないというメッセージ

0
Badr Bellaj