-1

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

该程序将是...

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

1 回答 1

2

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

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

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

因此,假设您对在传输过程中可能未加密的邮件感到满意(并不是说您可以做很多事情-也许使用 SMS,但即使是未加密的,我也不确定哪个更难拦截),唯一的安全性您可以强制执行的是仅通过 HTTPS 提供代码输入页面/链接页面,这样一旦用户尝试输入代码或链接,位于用户计算机和您的服务器之间的攻击者将无法拦截它。

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

于 2015-01-16T19:12:32.427 回答