Forgot Password Cheat Sheet

パスワードリクエストを忘れた

ユーザーがパスワードを忘れた場合のサービスを使用してユーザー名または電子メールを入力する場合、安全なプロセスを実装するには、以下に従う必要があります。

  • 存在するアカウントと存在しないアカウントの両方に対して一貫したメッセージを返します。
  • 攻撃者がどのアカウントが存在するかを列挙するのを防ぐために、応答が一定の時間内に返されるようにします。これは、クイック終了メソッドを使用する代わりに、非同期呼び出しを使用するか、同じロジックに従うようにすることで実現できます。
  • CAPTCHA、レート制限、その他の制御などの自動送信に対する保護を実装します。
  • SQLインジェクション防止方法や入力検証などの通常のセキュリティ対策を採用します。

ユーザーがパスワードをリセット

ユーザーがトークン(電子メールで送信)またはコード(SMSまたはその他のメカニズムで送信)を提供して身元を証明したら、パスワードを新しい安全なパスワードにリセットする必要があります。このステップを確実にするために取られるべき措置は次のとおりです。

  • ユーザーは、設定したパスワードを2回書き込んで確認する必要があります。
  • 安全なパスワードポリシーが設定されており、アプリケーションの他の部分と一貫していることを確認してください。
  • 安全な方法に従ってパスワードを更新して保存します。
  • パスワードがリセットされたことを通知する電子メールをユーザーに送信します(電子メールでパスワードを送信しないでください!)。
  • 新しいパスワードを設定したら、ユーザーは通常のメカニズムでログインする必要があります。ユーザーを自動的にログインさせないでください。これにより、認証とセッション処理のコードがさらに複雑になり、脆弱性が発生する可能性が高くなります。
  • 既存のすべてのセッションを無効にするか、セッションを自動的に無効にするかをユーザーに確認します。

URLトークン

URLトークンは、URLのクエリ文字列で渡され、通常は電子メールでユーザーに送信されます。プロセスの基本的な概要は次のとおりです。

  • ユーザーにトークンを生成し、URLクエリ文字列に添付します。
  • このトークンを電子メールでユーザーに送信します。
  • ホストヘッダーインジェクション攻撃を回避するために、リセットURLの作成中にホストヘッダーに依存しないでください。URLはハードコーディングするか、信頼できるドメインのリストに対して検証する必要があります。
  • URLがHTTPSを使用していることを確認してください。
  • ユーザーは電子メールを受信し、トークンが添付されたURLを参照します。
  • リファラーのリークを回避するために、パスワードのリセットページに値がリファラーポリシータグが追加されていることを確認してください。noreferrer
  • レート制限など、ユーザーがURLにブルートフォーストークンを使用しないように適切な保護を実装します。
  • 必要に応じて、ユーザーにセキュリティの質問への回答を要求するなど、追加の検証手順を実行します。
  • ユーザーに新しいパスワードを作成させて確認させます。アプリケーションの他の場所で使用されているものと同じパスワードポリシーが適用されていることを確認します。