web-dev-qa-db-ja.com

新しいユーザーに招待専用のWebサイトでパスワードを通知する最も安全な方法は何ですか?

私は人々がアカウントを持つウェブサイトを開発しています。ただし、ほとんどのWebサイトとは異なり、ユーザーは登録せず、サイト管理者によって招待されます。サイト管理者は、自分の電子メールアドレスに基づいて新しいユーザープロファイルを作成し、サイトでプロファイルを使用できることを知らせるメールをサイトに送信します。

しかし、私は人々に自分のパスワードを知らせる最も安全な方法がわかりません。通常の登録では、ユーザーは選択したパスワードを入力し、それをハッシュして保存します。あとは、メールアドレスを確認するためのリンクを送信するだけです。

私たちの場合、彼らは登録しないので、パスワードを提供しないでください。続行する最も安全な方法は何ですか?

この回答 は、パスワードを表示できるページへのリンクを送信することを提案していますが、自分のパスワードを入力できるページに送信するよりもメリットがあるかどうかはわかりません。実際、後者の提案の方が良いと思います。パスワードがすでに設定されている場合、Webページはパスワードが設定されていることをユーザーに通知でき、そうでない場合は管理者にすぐに連絡することができます。

セキュリティの観点から、新しいユーザーにパスワードを通知する最良の方法は何でしょうか?

71
Avrohom Yisroel

この場合のベストプラクティスは、自分のパスワードを設定できるページへのリンクを送信することです。

このリンクを使用して登録した後、リンクがアカウントの乗っ取りに使用できないことを確認する必要があります。これを実現する1つの方法は、URLに時間制限のある1回限りのトークンを含めることです。

206
David Waters

新しく作成したユーザーに、自分のパスワードを設定できるリンクを送信するだけです。ただし、メールはプレーンテキストで送信されるため、乱用を防ぐために次のことを考慮してください。

  • リンクが1回だけ使用できることを確認してください(ユーザーがまだパスワードを持っていない場合のみ)
  • おそらく、パスワードを設定する必要があるまで日付を設定します。それ以外の場合は、新しいリンクを要求する必要があります
  • ランダムなリンクの生成。したがって、メールのリンクを推測することは(ほぼ)不可能になります。
  • 確認の別のステップを追加します(例:メールアドレスや誕生日の入力を要求します)
52
Samuel Philipp

私の経験から、それは通常2つの方法で行われます。

1つの方法はすでにDavid Watersによって説明されているので、ここでは触れません。

もう1つの方法は、特定の時間枠(通常は48時間のウィンドウ)で変更する必要があるワンタイムパスワードを送信することです。

この方法では、ブルートフォースされないように十分に保護され、一意であり、再度使用できないランダムなパスワードを受信することを確認する必要があります。

ユーザーがこのパスワードを使用して接続すると、Webサイトは、ユーザーが選択したパスワードを選択できるページにリダイレクトする必要があります。

7
user3399

OpenIDまたはOauthプロバイダー(Google、Microsoft、Amazonなど)プロバイダーを使用して本人確認を行うことで、初回認証を行うようユーザーに依頼します。これにより、パスワードを電子メールで送信するというセキュリティ上の懸念を回避できます。ユーザー。

3
TJK

したがって、ユーザーは電子メールアドレスが関連付けられたアカウントを持っていますが、パスワードを設定していません。これは、パスワードを設定したが忘れた場合とまったく同じです。

したがって、ユーザーが電子メール経由でリンクをリクエストして新しいパスワードを設定できるようにする「パスワードを忘れた」手順を実装します。次に、ユーザーがその手順を使用して、アカウントを初めて使用するときにパスワードを設定してもらいます。アカウントを作成するときに、ランダムに生成された文字列にパスワードを設定できます。

これにより、1回限りのURLまたは有効期限が切れるURL thenを生成しなくても、自分の時間に自分のアカウントを作成できます。彼らが自分のアカウントを使用しない場合、パスワードは無作為に生成された文字列のままであり、総当たり攻撃に対して十分に安全であるはずです。

2
SQB

私の見解では、電子メールは一般的に使用される通信チャネルです。これは一般に安全であると考えられていますが、POP3/IMAPまたはSMTPにSSL/TLS接続を使用するなど、すべての人が適切に設定する場合に当てはまります。実際には、すべての人々がこれらの手法が何に適しているのかを知っているわけではなく、トランスポートセキュリティなしで前進するだけなので、システムの設定を誤っています。では、この問題を克服するにはどうすればよいでしょうか。

あなたの顧客にアカウントを提供するより安全な方法があるでしょう。スマートフォンについて考えてみてください。設定する必要はなく、機能します。したがって、設定ミスの問題はありません。少し考えてみましょう。 SMSトークンと呼び出しも安全ではありませんが、ハッカーの電話にリダイレクトされた別の電話からSMSを取得するのは少し難しいです。電話番号を使用して、セットアップページで使用するワンタイムパスワードを送信して登録を完了しない場合は、電子メールを使用するよりも安全です。

とにかく、メールを使用したい場合は、ユーザーのパスワードを設定して送信しません。そして、私はなぜあなたがそれをそのようにしてはならず、彼らに自分でパスワードを設定させるべきなのかについて考えるいくつかの理由を得ました:

  • パスワードを送信すると、一部のユーザーはハッシュ化せずに保存したと思って、それが見えても、たとえそれが真実ではないとしても、彼らがあなたを信用しないようにすることができます。
  • 一部のユーザーはパスワードを変更せず、送信したパスワードのままにします。
  • 顧客がパスワードを元のパスワードのままにしていて、誰かが他の電子メールアカウントまたは送信者の電子メールにアクセスできる場合、彼は自分のパスワードを入手しました。

そのため、自分でパスワードを作成できるリンクを送信します。

1
CDRohling

最も広く使用されている方法は、ユーザーに自分のパスワードを作成するためのリンクを送信することです。

ただしが実用的でなく(たとえば、サイトのこの部分をまだ開発していないため)、それでも隣に座っているユーザーを招待したい場合最初のパスワードを手動で与えるには、 One-Time Secret を使用します。

世の中にはたくさんのサービスがありますが、 https://onetimesecret.com は覚えやすいです。

他の誰かがすでにシークレットを読んだ場合は通知するように伝えることを忘れないでください(EG FSBまたはNSAはすでにアカウントにアクセスしています);-)

招待制のサービスにアクセスするために必要な秘密については、 ここをクリック してください。

次の警告が表示された場合:

不明な秘密

存在しなかったか、すでに表示されています。

+ 00800 IVEBEENHADですぐにご連絡ください

1
Fabby

ランダムに生成されたワンタイムトークンで自分のパスワードを設定するためのリンクを送信します。現在実行していることは、いくつかのセキュリティ原則に違反しています。

1)サイト管理者はユーザーのパスワードを知らないはずです

2)パスワードはプレーンテキストで送信しないでください

トークンがランダムに生成されることを保証すると、攻撃者が可能性のあるトークンをブルートフォースしてからパスワード自体を設定することが防止されます。ユーザーが独自のパスワードを設定すると、安全な配布チャネルが不要になります。また、トークンに時間制限を設けることをお勧めします。その後、新しいトークンを生成する必要があります。これにより、パスワードを設定していないユーザーがトークンを推測され、アカウントが乗っ取られる事態を防ぐことができます。

0
Steve Gazzo

私はこの同じメール([email protected]から)を全員に送信します(メール間の唯一の違いは、ブルートフォースできない自動生成された長いアカウントコードです):

A new trading account #3298889119019881 is available for you.

To activate it, please:
  1) Respond to this email with the words "I accept with password suffix X"
  2) Then, log in to https://InvitedTrading.com using username=<your email> and password=<3298889119019881 + private details + X>
      <private details> is a string of first name, last name, birthdate, and social security number
      E.g., "3298889119019881JohnDoe06251984123456789f76djisuh" for John Doe, born June 25, 1984, with social security number 123456789, with X=f76djisuh
  You must then change your password and can change your username if desired

Or, do nothing and all will be deleted in 48 hours.

If you do not trust https://InvitedTrading.com or have any reason to doubt that they should already know your
private details above, please do nothing.
0
bobuhito