質問:
セキュリティの質問、生年月日、またはその他のパラメータを必要とせずに、誰がパスワードをリセットしているのかを確認するにはどうすればよいですか?
コンテキスト
多くのWebサイトでは、パスワードのリセットが要求されると、データベース内のユーザー名にランダムなハッシュが付加されます。このハッシュは、URLの一部としてユーザーに電子メールで送信されます。ユーザーが電子メールで送信されたリンクをクリックすると、新しいパスワードを選択できるページに移動します。ここでの問題は、ユーザーがこの「新しいパスワードの設定」ページに任意の電子メールアドレスを入力し、そのアカウントに新しいパスワードを設定できることです。では、ユーザーが新しいパスワードを設定しているアカウントを実際に所有していることを確認するにはどうすればよいですか?
パスワードはハッシュが一致した場合にのみ設定できるため、ランダムハッシュを含むURLを新しいパスワードと一緒にパラメーターとして送信する必要があると考えました。ただし、$ _ GET ['hash']変数は、電子メールからリンクされたパスワードの設定ページにのみ存在するため、これは機能しません。ユーザーが[送信]をクリックするとすぐに、$ _GET['hash']変数が消えます。
簡単な解決策は、送信時にURLを介して$ _GET ['hash']変数を再度渡すことですが、これは開発者にとって余分な手順を作成し、混乱させる可能性があります。(私はライブラリを作成しているので、私のコードは開発者が理解して統合できるほど単純でなければなりません)。
人々はこれまでどのように問題に取り組んだことがありますか?一部の人々は、リセットリンクを時間制限にすることを提案しました。これは、リンクが30分間しか有効でなかった場合、悪意のあるユーザーが他のユーザーのパスワードを変更できるのは、そのユーザーが過去30分間にリセットを要求した場合に限られることを意味します。ただし、そこにはまだ脆弱性のウィンドウがあるため、完全ではありません。
必要に応じて説明を求めてください。
ありがとうございました