【发布时间】:2015-08-19 16:26:43
【问题描述】:
我正在为我的user management system 的下一版本重新实现“重置密码”功能。它目前的工作方式是:
- 用户输入他们的用户名和电子邮件地址。
- 如果此信息正确,则会生成一个随机令牌并将其存储在数据库中,并将带有该令牌的链接发送到用户存档的电子邮件地址。
- 用户单击该链接,可以选择“确认”或“拒绝”重置请求。
- 如果他们确认重置请求,他们必须输入他们的电子邮件地址,以及他们的新密码(并重复新密码)。这与令牌一起发布到服务器。如果电子邮件地址与令牌匹配,并且重置请求尚未过期,则会更新密码。
我的问题是:我们真的需要用户在创建新密码时重新输入他们的电子邮件地址吗?如果随机令牌足够强大,那么需要这条额外的信息是否会提供任何额外的安全性,还是只会恶化用户体验?
【问题讨论】:
-
您不能只对发送给用户的链接中的电子邮件地址进行编码吗?这样用户就不必输入新密码以外的任何内容。
-
确实可以 - 问题是,应该我吗?
-
要求电子邮件似乎解决了攻击者知道(或可以猜到)令牌但不知道电子邮件地址的用例。如果攻击者从用户的电子邮件中获取令牌,那么攻击者肯定知道电子邮件地址。对发送给用户的 URL 中的电子邮件地址进行编码似乎不会为攻击者提供他们不知道的任何信息。您可能希望通过 security.se 运行它
-
如果令牌是唯一的,我根本不需要对电子邮件地址进行编码。我可以仅通过令牌识别用户。
-
没错,但从技术上讲,如果攻击者知道任何令牌,即使他们不知道电子邮件地址,他们也可以更改密码。在实践中,我认为这不是什么大问题。我的总体观点是,您可以通过让用户手动输入电子邮件地址来保持相同的安全层(尽管是薄弱层)而不会打扰用户。
标签: security user-management forgot-password reset-password