OWASP Forgot Password Cheat Sheet は次のことを示唆しています。
パスワードのリセットが成功するたびに、セッションを無効にし、ユーザーをログインページにリダイレクトする必要があります。
これがなぜそれほど重要なのか理解できません。この推奨事項にセキュリティの基礎はありますか?ある場合、それは何ですか?
攻撃者があなたのパスワードを持っているとしましょう。ログインしてリセットします。リセットしても既存のすべてのセッションが無効にならない場合でも、攻撃者はセッションの有効期限が切れない限りアクセスできます。
このシナリオでは、リセットは実際には何も達成していません。
サイトの機能によっては、現在は古くなっているパスワードでサインインすると問題が発生する場合もあります。あなたのパスワードが何かのロックを解除するために使用され、「password1」でサインインしているとしましょう。しかし、サーバーはあなたのパスワードを「password2」として保存しています。これは明らかに架空のものですが、うまくいけばポイントを示しています。
ログイン画面にリダイレクトするのはお勧めです。ユーザーをどこに送るかが重要である理由はわかりませんが、ユーザビリティの観点からは、ユーザーをホームページではなくログインページに送る方が理にかなっています。
パスワード変更時のセッション管理が安全に行われていれば、実際にログインページにリダイレクトする必要はありません。つまり、現在のすべてのセッション識別子が無効化され、現在のセッションが新しいセッション識別子にアタッチされている限り(通常、認証Cookieのトークンとして発行されます-Cookieは、パスワードを変更したセッションにのみ送信されます)すでにアカウントに参加している攻撃者がログインしたままになるリスクはありません。
OWASP記事の背後にある理論的根拠を以下に説明します。そのセキュリティ面に問題はありませんが、いくつかのユーザビリティの問題があります。
パスワードリセット機能は、ユーザーがアカウントを保護する場合によく使用されます。
パスワードのリセット時にすべての既存のセッションを無効にすることにより、システムは新しいパスワードを持つ人だけがログインできるようにします。
たとえば、古いパスワードを使用してアカウントにアクセスした攻撃者がログインしたとします。すべてのセッションをリセットすると、攻撃者はログアウトされます。
なぜ現在のユーザーをログアウトするのですか?
攻撃者が現在のユーザーのセッションに乗っている、たとえば セッション固定 脆弱性を使用しているとします。これは、攻撃者が実際のユーザーと同じセッションを持っていることを意味します。現在のセッションをリセットすると、アクセス権を持たないアカウントに誰もいないことを確認できます。
上記の引用のログインページにリダイレクトすることは、ユーザーを現在のセッションとすべてのセッションからログアウトする必要があるという事実を実際に説明しています(ただし、新しい識別子を持つ新しいセッションにユーザーをドロップすることを止めるリスクはありません)。
他の答えはおそらくnetsecの観点からはより正確ですが、ユーザーが実際に新しいパスワードでログインできることを確認することもできるようにしたいと思います。これにより、ブラウザが古いパスワードを自動入力するなど、問題が発生した場合にそれが明らかになります。
また、ユーザーがパスワードリセットをログインとして使用することもできなくなります。私のアカウントの1つでは、パスワードを覚えるよりもセキュリティの質問に答える方が簡単です。リセットするたびに一意のパスワードを設定する必要があり、覚えられないためです。
すべての古いセッションが無効になり、パスワードを変更した現在のアクティブセッションが自動的に置き換えられるため、ログインページに移動する理由は1つだけありますセキュリティ関連する理由があります。
パスワードリセットを使用してログインするのがより面倒になり、使用頻度が減り、盗聴や偶発的な開示からより安全に保つことができます。
また、ユーザビリティの理由forがそこに送信されます。これにより、実際に新しいパスワードを使用できるようになり、ブラウザ内のパスワードキャッシュが更新されます。
ユーザーがブラウザーにパスワードを保存することを許可されている場合、ユーザーをログインページにリダイレクトすると、ブラウザーはそのページで新しいパスワードを取得できます。そうしないと、次にユーザーがブラウザーにログインしたときに、パスワードフィールドに古いパスワードが「役立つ」ように事前入力されます。これは、ユーザーが何が起こっているのかを理解していない場合に混乱を招く可能性があるアクションです。
セキュリティ対策を見守っていればとても簡単です。実際にすべてのアクティブなセッションと、問題を引き起こしたスティーラーのデバイスが無効になります。
パスワードをリセットした直後に再度ログインしたとき
a)3日後よりも3秒後にパスワードを覚える可能性が高くなります。
b)次に、ブラウザはユーザーに保存されたパスワードを新しいパスワードで更新するかどうかをユーザーに尋ねることができ、ブラウザはログインページでそれを記憶します。
新しい有効なセッションを確立し、新しいパスワードが機能することを確認し、現在のセッションをログアウトするための簡単なメカニズムを提供することに加えて、ユーザーが3回目にパスワードを入力して覚えやすくなるという追加の利点もあります。
ここで行われた他の多くのポイントに加えて、保守性/強化/監査の観点から、セッション作成メカニズムを1つのエントリポイントのみに制限することには利点があります。
ロックアウト状態でパスワードをリセットしたユーザーは、IDフープの回復証明をすべて通過した後でも、必ずしもログインユーザーとして扱われるべきではありません。そうしないと、監査/ペンテストを行うときにテストする追加のシーケンスがあります。