【问题标题】:PHP Reset Password with code instead of linkPHP使用代码而不是链接重置密码
【发布时间】:2015-01-16 19:03:18
【问题描述】:

当用户想要更改密码时,通过电子邮件发送随机生成的代码而不是链接有什么问题吗?

程序是……

  1. 用户通过输入电子邮件地址触发密码重置
  2. 电子邮件在 DB 中被检查为真正的用户
  3. 使用随机生成的代码向该用户发送电子邮件
  4. 相同的代码被加密并插入到数据库中的专用列中
  5. 用户输入通过电子邮件发送给他们的代码
  6. 根据存储的 bcrypt 密码进​​行检查
  7. (如果全部正确)允许用户输入新密码

【问题讨论】:

  • 不,没有错。
  • 安全性是一样的,只是可行性问题。
  • 用户不得不复制和粘贴代码(尤其是移动用户)更加痛苦。

标签: php bcrypt reset-password


【解决方案1】:

无论是代码还是链接,在安全性方面确实没有区别。

链接所做的只是自动输入代码并提交表单;链接的唯一缺点是某些(我认为不好)电子邮件提供商会自动向电子邮件中的所有链接发出 GET 请求,在这种情况下,您应该做的是您的链接应该指向一个页面,要求单击按钮进行确认重置(在幕后发出第二个 POST 请求),以便“意外” GET 不会触发重置。

在安全性方面,电子邮件并不是最安全的媒介,因为一旦邮件离开您的电子邮件服务器,您就无法强制执行加密 - 如果碰巧中继该电子邮件的邮件服务器不支持加密,它们就会通过未加密的邮件到下一个服务器等

因此,假设您对可能在传输过程中未加密的邮件感到满意(并不是说您可以做很多事情 - 可能使用 SMS,但即使是未加密的,我也不确定哪个更难拦截),您可以强制执行的唯一安全措施是仅通过 HTTPS 提供代码输入页面/链接页面,这样一旦用户尝试输入代码或链接。

一个好的用户体验解决方案是让您的代码输入页面接受查询字符串参数以自动填写代码(如果提供)(如果参数缺失,则提供空白表单供用户手动填写)并且您的电子邮件应包含 (HTTPS) 链接和代码,以防用户由于某种原因无法使用该链接。

【讨论】:

  • 这是一个很好的答案。
猜你喜欢
  • 2013-03-23
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多