为啥我们应该让帐户激活/密码重置链接在一段时间后过期?

Posted

技术标签:

【中文标题】为啥我们应该让帐户激活/密码重置链接在一段时间后过期?【英文标题】:Why should we make account activation/password reset links expire after some time?为什么我们应该让帐户激活/密码重置链接在一段时间后过期? 【发布时间】:2011-05-29 18:21:40 【问题描述】:

如果永不过期,会有什么大问题吗?

有人忘记了他的密码并要求重置他的密码,一封带有密码重置链接的电子邮件被发送给他。

然后他突然想起了他的密码,所以他只是忽略了密码重置电子邮件。但几天后,他又忘记了。由于他的邮箱中已经有一封密码重置电子邮件,他只需单击该链接即可返回该网站以重置他的密码。

这似乎没问题,那么为什么我们要让帐户激活/密码重置链接在一段时间后过期?

【问题讨论】:

这是到期的潜在优势(与安全和隐私问题有关)超过缺点的情况之一(在您的示例中,用户不必返回并请求另一个密码重置)。除非您有充分的理由不这样做,否则请遵循标准。 【参考方案1】:

如果他们的电子邮件帐户遭到入侵怎么办。然后,攻击者会看到所有这些“密码重置”链接,并点击它们进一步危害更多帐户。其中您的服务可能会使用真实货币或信用卡信息。

【讨论】:

如果他的电子邮件帐户已被盗用并且攻击者看到该电子邮件,即使该链接不是永久链接并且已经过期,他仍然可以访问该网站并请求密码重置电子邮件并所以攻击者仍然可以破坏该帐户。 重置密码链接也应该被标记为used,因此嗅探器和请求日志不能再次用于重置密码。 一旦您的电子邮件遭到入侵,就帐户而言,您几乎被搞砸了,但使用某种形式容易记住的挑战和响应(您知道,标准的“您的第一只宠物的名字是什么?” type stuff) 可以使重置链接对临时黑客更加安全。针对特定个人的黑客可能拥有或可以很容易地找到该信息,但那是有人投入时间和精力来破坏特定个人的在线身份。 @Endophage 好点。但是,如果您将密钥存储在某种形式的内存缓存中,密钥过期时间为 24 小时或其他时间,那么使重置链接过期并不太难。不做似乎太容易了。 嗯,我从来没有说过你不应该让电子邮件链接过期,事实上我建议,在比 24 小时短得多的时间之后。我已经建立了许多用户管理系统,我建议在不超过几个小时后过期链接。用户不应请求稍后使用重置链接。但是,添加某种挑战问题会使链接更加安全。同样 bobo 的评论指出,一旦电子邮件帐户被盗用,过期时间无关紧要,攻击者可以简单地请求另一个重置链接。

以上是关于为啥我们应该让帐户激活/密码重置链接在一段时间后过期?的主要内容,如果未能解决你的问题,请参考以下文章

转:java 帐号激活与忘记密码 实例

JavaMail学习笔记帐号激活与忘记密码 实例(zhuan)

Parse Server 电子邮件中的链接已损坏(验证帐户、重置密码...)

密码重置哈希的有效期应该是多久?

Windows 文件共享:为啥有时新创建的文件在一段时间内不可见?

在 Meteor 帐户-密码中重置密码后禁用登录