security - 忘记密码重置页面: should the user need to enter a username/email as well?

标签 security user-management forgot-password reset-password

我正在为我的 user management system 的下一版本重新实现“重置密码”功能。目前的工作方式是:

  1. 用户输入用户名和电子邮件地址。
  2. 如果此信息正确,则会生成一个随机 token 并将其存储在数据库中,并且包含该 token 的链接将发送到用户存档的电子邮件地址。
  3. 用户点击链接,可以选择“确认”或“拒绝”重置请求。
  4. 如果他们确认重置请求,则必须输入他们的电子邮件地址以及新密码(并重复输入新密码)。这与 token 一起发布到服务器。如果电子邮件地址与 token 匹配,并且重置请求尚未过期,则会更新密码。

我的问题是:我们真的需要用户在创建新密码时重新输入他们的电子邮件地址吗?如果随机 token 足够强大,那么需要这条额外的信息是否会提供任何额外的安全性,或者只会恶化用户体验?

最佳答案

我认为这样做没有任何值(value)。只需确保您的 key 安全即可。也许是 128 位(即 22 个 Base 64 编码字符)安全随机。这看起来足够大了。还要为 token 生命周期添加超时。 24 小时似乎是安全性和不便性之间的一个很好的折衷方案。

我喜欢将电子邮件地址添加到 token 的想法,以便您可以更智能地记录故障。

关于security - 忘记密码重置页面: should the user need to enter a username/email as well?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654352/

相关文章:

javascript - JavaScript 如何从用户的计算机获取数据?

mysql - 有没有办法在没有身份验证的情况下确定 MySQL SSL 连接?

php - 寻找基于PHP的用户管理系统

c# - 如何创建密码重置链接?

php - 如何防止 PHP 中的 SQL 注入(inject)?

PHP - 将数据从一个站点安全地传递到另一个站点

node.js - Node.js/React 的用户管理

Mysql Slow.log 用户特定

android - 电子邮件不存在时 Firebase 重置密码