0

質問:

セキュリティの質問、生年月日、またはその他のパラメータを必要とせずに、誰がパスワードをリセットしているのかを確認するにはどうすればよいですか?

コンテキスト

多くのWebサイトでは、パスワードのリセットが要求されると、データベース内のユーザー名にランダムなハッシュが付加されます。このハッシュは、URLの一部としてユーザーに電子メールで送信されます。ユーザーが電子メールで送信されたリンクをクリックすると、新しいパスワードを選択できるページに移動します。ここでの問題は、ユーザーがこの「新しいパスワードの設定」ページに任意の電子メールアドレスを入力し、そのアカウントに新しいパスワードを設定できることです。では、ユーザーが新しいパスワードを設定しているアカウントを実際に所有していることを確認するにはどうすればよいですか?

パスワードはハッシュが一致した場合にのみ設定できるため、ランダムハッシュを含むURLを新しいパスワードと一緒にパラメーターとして送信する必要があると考えました。ただし、$ _ GET ['hash']変数は、電子メールからリンクされたパスワードの設定ページにのみ存在するため、これは機能しません。ユーザーが[送信]をクリックするとすぐに、$ _GET['hash']変数が消えます。

簡単な解決策は、送信時にURLを介して$ _GET ['hash']変数を再度渡すことですが、これは開発者にとって余分な手順を作成し、混乱させる可能性があります。(私はライブラリを作成しているので、私のコードは開発者が理解して統合できるほど単純でなければなりません)。

人々はこれまでどのように問題に取り組んだことがありますか?一部の人々は、リセットリンクを時間制限にすることを提案しました。これは、リンクが30分間しか有効でなかった場合、悪意のあるユーザーが他のユーザーのパスワードを変更できるのは、そのユーザーが過去30分間にリセットを要求した場合に限られることを意味します。ただし、そこにはまだ脆弱性のウィンドウがあるため、完全ではありません。

必要に応じて説明を求めてください。

ありがとうございました

4

3 に答える 3

1

正しいユーザーのみがメール内のリンクをクリックします。
ユーザーが新しいパスワードを入力する形式でハッシュを渡すことができます。

$hash = $_GET["hash"];

...

<form name="newpasswordform">
...
<input type="hidden" name="thehash" value="<?php echo $hash?>"
...
</form>

このようにして、フォームが送信されたときにハッシュを再確認できます。

于 2013-01-06T06:52:01.567 に答える
0

私はやった(それが最もエレガントな解決策だとは言わないが、それはうまくいく:P):

http://mysite.com/resetpwd.php?code=1234&email=hello@hi.comのようなURLでメールを送信します。コードは、ユーザーの現在のメールのハッシュとハッシュされたパスワードです。

ユーザーがリンクをクリックすると、コードは「1234」が「hello@hi.com」のハッシュとハッシュされたパスワードであることを確認し、パスワードのリセットページを表示します。パラメータとして「1234」と「hello@hi.com」を追加してください。次のページに渡される形式で。[Enter]をクリックすると、http://mysite.com/resetpwd.php?code = 1234&email = hello @ hi.com&newpass=hellothere123のように送信されます。

Resetpwd.phpは$_GET['newpass']をチェックし、見つかった場合は、1234がユーザーのハッシュされたパスワードとhello@hi.comのハッシュであることを再度確認し、パスワードをリセットします。

編集:ああ、なるほど、確認コードを再度渡したくないのですが...もっと良い解決策を考え出さない限り、これは無視してください:)

于 2013-01-06T06:51:28.597 に答える
0

いくつかのサイトがその追加レベルのセキュリティを達成するために行っていることは、セキュリティの質問と回答を指定させることです。したがって、ハッシュに加えて、セキュリティの質問(「お気に入りのペットは何ですか?」)を照合すると、ユーザーであることを確認できます。
おそらく、bankofamerica.comのように、写真や質問などを選択してもらうような他のセキュリティ対策を実装しなくても、ほぼ同じくらい安全です。

于 2013-01-06T06:52:47.897 に答える