"Password forgot"Php系统

"Password forgot" Php system

哪种策略最适合找回密码。 向用户发送电子邮件 link 以创建新密码,覆盖当前密码?要么 通过电子邮件向用户发送随机生成的密码,然后要求他们更改密码?

第一个。

创建一个表单来获取用户的电子邮件地址。

如果您的系统中不存在该用户,请向该地址发送一封电子邮件,说明 "someone tried to reset your password but it's not in our system"。

如果该用户确实存在于您的系统中,请创建一个 link 返回您的站点,并向该用户发送电子邮件 link。他们单击电子邮件中的 link 并 return 到您的站点。

link应该是这样的:

https://example.com/reset-password?email=$usersEmail&hmac=$hmacOfTheirEmail

通过检查 HMAC 确认电子邮件未被篡改。

为了避免用户枚举,return 无论他们的电子邮件是否存在于您的系统中,表单都会做出相同的响应。

取决于您的安全级别...

  • 登录用户
  • 向他们提出一个或多个安全问题
  • 进行多重身份验证

然后强制用户更改密码

其他一些 answers/sites 建议将令牌存储在数据库中。询问 Mozilla 进展如何。

您可以向 link 添加一些其他参数,例如 到期时间 和 IP 地址。确保你也将它们包含在 HMAC 中。

为防止重放攻击,请在 link.

中包含用户 (和忘记的)密码的哈希值