web-dev-qa-db-ja.com

リンクとコードが記載されたアカウント確認メール

確認メールを送信する必要があります

  • メール確認
  • パスワードのリセット
  • メールの変更
  • パスワードの変更

これまで、ほとんどのWebアプリケーションはクリック可能な確認リンクを含むメールを送信していましたが、これをクリックしてサイトに戻り、プロセスを完了しました。

最近では、代わりに確認コードを含む電子メールを送信する多くのWebアプリが表示されます。これはブラウザーにコピーして貼り付ける必要があり、手動で入力するのが簡単な短い乱数の場合もあります(たとえば、デスクトップで作業していますが、電話でメールを読んでいます)。

これら2つのアプローチの長所/短所は何ですか?

「新しい」方法はセキュリティよりもUXだと感じますが、よくわかりません。どちらがより安全で、どのトレードオフを考慮すべきですか?

3
lonix

全体的な目標は、電子メールアドレスを通じてユーザーに連絡できることを確認することです。

これはトークンを作成することで行われ、ユーザーがリンクをクリックしたり、コードをコピー/貼り付け(または再入力)したりしても、そのトークンをサーバーに戻す方法はどれでも実行できます。

トークンを送信する理由として、リストにはパスワードのリセットと電子メールのリセットが含まれているため、電子メールがユーザーに届くことを単に確認する以外にも、これらの懸念事項があることに注意してください。攻撃者はトークンを推測しようとする可能性があります。

トークンが長いと、攻撃者が推測するのが難しくなる可能性がありますが、ユーザーはそれらを入力する気がなくなります。

一方、ユーザビリティは常にセキュリティにおいて重要な役割を果たします。最高のセキュリティは厳密ではありません。これは人々が使用するセキュリティであり、特に回避策を模索することはありません。

セキュリティを意識している人々は、電子メールのリンクをたどる意欲をますます減らしています。電子メールのリンクをたどることに慣れている人は、悪意のある電子メールのフィッシングリンクもたどる可能性が高くなります。

さらに、ユーザーは、使用しているコンピューターでメールボックスにアクセスできない場合や、メールクライアントがデフォルトで開くのと同じWebブラウザーを使用していない場合があります。つまり、モバイルデバイスのデフォルトのメールクライアントは、ユーザーが後でインストールして定期的に使用するブラウザではなく、電話/テーブルに付属するデフォルトのブラウザを開く場合があります。

したがって、単純な電子メール検証の場合、またはログイン時の第2要素の場合、ユーザーが入力する短いコードは、高エントロピーソースによってシードされた暗号で安全な疑似乱数ジェネレータ(CSPRNG)を使用して生成される限り、十分です。/dev/urandomまたはプラットフォーム上の同様のシステムなど。コードをコピーして貼り付けるよりも、ユーザーが使いやすい場合に備えて、そのコードを含むリンクを含めることもできます。ここで重要なのは、一般的なもの(つまり、毎日)の場合、ユーザーがセキュリティをできるだけ簡単に強化できることです。

ただし、パスワードの変更、連絡先情報(メールアドレス)の変更、第2要素の一部(場合によってはメールアドレス)の変更など、ユーザーがアカウントのセキュリティについて何かを変更しようとしている場合は、トークンを長くして、ユーザーが入力するのが意味をなさないようにします。もちろん、エントロピーの高いソースを使用して、CSPRNGをシードします。

すべての場合において、これらのトークンの寿命は非常に限られており、数時間までです。それらを使い捨てにして(誰かが最初に誰かがトークンを使用したことをユーザーに知らせたり、盗聴者が遅い場合は盗聴者がそのトークンを再利用できないように)、そのトークンをその1つのアカウントでのみ使用できるようにします。 (ユーザーが自分でパスワードリセットトークンを生成し、ユーザーIDを他のユーザーに変更し、その方法で自分のアカウントにアクセスするという話があります。)すべてのログインとパスワードリセットの試行は、IPとアカウントの両方によって抑制され、試行の失敗ログに記録する必要があります。

4
Ghedipunk

私にとっては、検証プロセスがいかに効率的で、実際にどれだけうまく機能するかが問題でした。

[確認コード)

  • あなたが必要とする/望む特定の複雑さで生成することができます

  • おそらく目標に達するでしょう

  • 傍受からさまざまな方法で自分自身を保護することができます(小さな画像として送信される、またはぼやけたキャプチャのような画像として送信されるなど)

  • すでに開いているWebページにコードを入力することを妨げるものは何もありません

[検証リンク)

  • ターゲットに実際に到達できない可能性があります(過剰なスパムフィルターによってブロックされている可能性があります)

  • 傍受および分析され、セキュリティの侵害につながる可能性があります

  • 基本的なセキュリティを備えた会社は、ユーザーがリンクを開くことに非常に注意するようにトレーニングするため、ユーザーがクリックすることは決してないかもしれません。ポリシーは通常、デフォルトではクリックしないことです。

  • ユーザーがクリックしたい場合でも、会社のポリシーとセキュリティに応じてリンクが機能する場合と機能しない場合があります(Outlookではリンクをブロックでき、ウイルス対策ではブロックでき、その他のセキュリティ対策ではブロックできます)。

上記の理由により、私はいつでも確認コードを使用します。

注意として、大規模なオンラインゲーム会社(Steam、EA、Crpyticなど)は同じ方法を使用します。つまり、コードまたは画像内のコードを送信します。

1
Overmind