web-dev-qa-db-ja.com

メール確認の後にパスワードベースのログインを実行する必要がありますか?どうして?

[これは重複しており、 https://stackoverflow.com/questions/26564992/should-email-verification-be-followed-by-password-based-login-why])でオフトピックと見なされています

典型的なアカウント作成プロセスは次のようです。

  1. メールアドレスを入力し、パスワードを設定します
  2. リンクまたはハッシュトークン、あるいはその両方を含む確認メールを受信する
  3. リンクをクリックして、サイトでトークンを確認または入力します

ただし、どこかを読んだことがあるのですが(これは今では見つかりません。そのため、質問です)、手順1で提供されたパスワードを使用してログインすることもユーザーに要求するように手順3を変更します。根拠は、この追加の予防措置により、電子メールアドレスを確認する人がアカウントを作成した人と同じであることを保証することでした。

質問:上記の説明は意味がありますか?また、パスワードベースのログインを要求することにより、電子メールの検証を実装する必要がありますか?

これは私にはある程度の意味があり、少なくとも害を及ぼすことはありません。ユーザーエクスペリエンスを少し面倒にする以外は。しかし、私はこれを必要としない多くのオンラインサービスを見て、なぜだろうと思います。

たとえば、私が心配するシナリオは次のとおりです。個人#1が最初にアカウントを作成したが、間違ったメールアドレスを(悪意を持ってまたは誤って)指定し、それが個人#2に送信された場合はどうなりますか。人2が世間知らずである場合、彼/彼女はリンクをクリックするだけでその電子メールアドレスを確認するかもしれません...そしてそれを忘れてしまいます。その後、人#1はパスワードを使用してログインできます。個人#1がそのアカウントであらゆる種類の悪いことをするとします。人#2は責任がありますか?

別の解決策は、新しいユーザーに最初に電子メールアドレスだけを指定するように依頼し、次にハッシュトークンでそれを確認してから、パスワードを設定するよう依頼することだと思います。しかし、私はこの方法でそれを行うオンラインサービスもあまり見かけません。

14
Anonymous

リンクをクリックするユーザーを確実に認証する必要があります。そうしないと、あなたが言うように、誰かが誤ってメールアドレスを確認する可能性があります。ただし、通常はユーザーを透過的に認証することができるため、パスワードを入力する必要はありません。

これを実現する方法は、セッションCookieを使用することです。サインアッププロセス中に、新しいユーザーにセッションCookieが発行されます。メールの確認リンクをクリックすると、通常は同じブラウザを使用するため、セッションCookieが添付されます。 Webサイトは、そのCookieを使用してユーザーの身元を確認できます。

11
paj28

別の解決策は、新しいユーザーに最初に電子メールアドレスだけを指定するように依頼し、次にハッシュトークンでそれを確認してから、パスワードを設定するよう依頼することだと思います。しかし、私はこの方法でそれを行うオンラインサービスもあまり見かけません。

これは ser enumeration 攻撃から保護するため、最も安全な方法です。メールアドレスが既に登録されている場合、ユーザーはパスワードリセットリンクを取得します。登録されていない場合は、サインアッププロセスを続行するためのリンクを取得します。そのメールアドレスにアクセスできない人は、そのメールアドレスのアカウントが存在するかどうかを判断できません。

サインアッププロセスは、ユーザーにパスワードを設定するように要求します。これにより、アクセス権のない他のユーザーのメールアドレスに関連付けられたアカウントを誰かがセットアップして使用するのを防ぎます。

実装に時間がかかり、そもそもユーザー列挙の問題を認識する必要があるため、広く使用されていません。一部のシステムでは、サービスのアカウントは一般に公開されていると見なされるため、ユーザー列挙は許容できるリスクです(例:ウェブメール) 、有効なユーザーIDがわからないとメッセージを送信できないため、アカウントにメールを送信してアカウントが存在するかどうかを確認できることがよくあります)。

これを行う別の方法は、あなたが説明している方法です。つまり、ユーザーが確認メールのリンクをクリックしたときに、パスワードの入力をユーザーに求めます。ただし、ここで利用できるショートカットがあります-ユーザーがサインアップに使用されたのと同じセッションからのリンクを確認した場合、パスワードの再入力の代わりにこれを使用できます。ただし、これが セッション固定 攻撃につながらないように、この場合は十分注意してください。ユーザーがサインアッププロセスの最初のステップに進んだときに、セッショントークンを無効にし、新しいトークンを生成する必要があります。これにより、セッションが固定されている場合、攻撃者はログインしたセッションに乗ることができなくなります。もう一度パスワードを入力するセキュリティを強化したい場合は、最初のステップおよびでセッショントークンを更新して、確認リンクをたどる必要があります。

6
SilverlightFox

メールからの1回限りのリンクを認証したくない場合:

  • メールボックスにアクセスできる人は誰でもアカウント全体を「所有」しているため、すでに認証されています。これがパスワードのリセットの仕組みです。
  • 「誰かが誤ってメールアドレスを確認してしまう可能性がある」というのは、メールボックスの所有者がアカウントの所有者であることを確認することです。私のラップトップが開いていて、ロックが解除されてGmailにログインしているときに、母がリンクをクリックしても、それは問題ありません。メールボックスがアカウントを所有していることを確認しています。
  • それは貧弱なUXです。

個人#1 /個人#2シナリオで問題が発生する唯一の理由は、個人#1がメールボックスの所有権を確認する前にアカウントを使用できるためです。それを防止した場合、Person#1は決して電子メールを受信しないため、そのような「悪いこと」はすべて実行できなくなります。

0
cottsak

これは古い質問ですが、最近同じシナリオに直面し、私の考えと共有したいと思います。私が行ったことは、ユーザーがログインしてユーザーのメールを直接確認する必要がないことです。応答は以下のとおりです。

  • 著者は、ユーザーが間違ったメールアドレスを入力したが、メールの所有者が何らかの理由でこれを受け入れるという1つのケースについて述べました。電子メールを確認した後、元のユーザーはさまざまな悪いことをする可能性があります。私の観点からは、ユーザーのメールアドレスはアプリケーションで共有されるべきではありません。ユーザーのメールを非表示にし、公開しないようにする必要があります。次に、メールは通常、パスワードのリセット、取引の確認などに使用されます。そのユーザーが意図的に間違ったメールアドレスを入力した場合、この操作から得られるメリットはわかりません。

  • 多くのアプリケーションでは、ユーザーはメールアドレスを確認せずにログインできません。

  • UXの観点からは、ワンボタンクリック機能を提供したいと考えています。つまり、ユーザーがメールアドレスを確認するために必要な手順を減らしたいと考えています。そのメールのリンクをクリックするのがおそらく最も簡単な方法です。

  • 検証には他にも多くの方法があります。メールはそのうちの1つにすぎません。その他はSMSメッセージ、2要素認証、IDドキュメントのアップロードなど)です。そのため、アプリケーションで重要なのはメールではありません。

0
Joey Yi Zhao