问题:
如何在不需要安全问题、DOB 或任何其他参数的情况下验证谁在重置密码?
上下文
在许多网站上,当请求重置密码时,随机散列会附加到数据库中的用户名。此哈希作为 URL 的一部分在电子邮件中发送给用户。当用户点击电子邮件链接时,他们会被发送到一个页面,他们可以在其中选择新密码。这里的问题是,用户可以在此“设置新密码”页面上输入任何电子邮件地址,并为该帐户设置新密码。那么如何验证用户是否真正拥有他们设置新密码的帐户?
我认为包含随机哈希的 URL 应该与新密码一起作为参数发送,因为只有在哈希匹配时才能设置密码。但是,这不起作用,因为 $_GET['hash'] 变量仅存在于从电子邮件链接的设置密码页面上。一旦用户单击“提交”,$_GET['hash'] 变量就消失了。
简单的解决方案是通过提交时的 URL 再次传递 $_GET['hash'] 变量,但这为开发人员创建了一个额外的步骤,并且可能会使他们感到困惑。(我正在创建一个库,所以我的代码必须足够简单,以便开发人员理解和集成)。
人们以前是如何解决这个问题的?有人建议使重置链接有时间限制。这将有所帮助,如果说链接仅在 30 分钟内有效,那么这意味着恶意用户只有在该人在过去 30 分钟内请求重置时才能更改其他人的密码。但是,那里仍然存在漏洞窗口,因此并不完美。
如果需要,请要求澄清。
谢谢