重置密码 - 我应该防止滥用它吗?

信息安全 密码管理
2021-09-05 12:15:39

我的假设是,如果攻击者获得了对用户电子邮件的访问权限,那么重置密码只是一个安全问题。

但我想知道,如果有人只是滥用它怎么办(例如,每 5 秒向前女友/男友电子邮件或讨厌的老板等发送“重置密码”请求)

  • 是否有一种常见的做法是对密码重置请求有某种计数/时间限制?(例如,用户在 y 周期内不能要求重置密码超过 x 次)

  • 或者它被认为是一个非问题,因为人们并不经常这样做?(或者至少和我假设的人们向别人的地址订购披萨一样频繁)

*这是我在这里的第一个问题,我希望它遵循FAQ,如果不是请评论

3个回答

是的,应用于登录尝试的相同“过度尝试”检测很可能也应用于“密码重置请求”。

许多系统还涉及验证码步骤,这使得向重置尝试发送垃圾邮件更加困难。以下示例是 outlook.com 密码重置页面:

outlook.com 密码重置截图

我认为这是一种相当低效的攻击 - 由于速率限制,它不能可靠地针对个人,即使可以,电子邮件也可以通过电子邮件客户端规则轻松阻止。

您不应该在没有某种(弱)用户标识的情况下重置密码。这不仅可以通过反复重置密码来防止某人成为滋扰者,而且因为它可以用作短期 DOS 的一种形式,这一点很重要。以下内容摘自Troy Hunt 关于安全密码重置的精彩博文:

上述每个示例的一件事是,只有在验证了帐户所有者的身份之后,旧密码才会变得无用。这非常重要,就像在验证身份之前可以重置帐户一样,然后为各种恶意活动打开大门。

这是一个例子:有人在拍卖网站上投标,在投标过程即将结束时,他们通过启动重置过程来锁定竞争投标人,从而消除他们的竞争。显然,如果设计不当的复位功能被滥用,可能会产生严重的不良后果。请注意,无效登录尝试导致的帐户锁定是一个类似的故事,但这是另一篇文章的故事。

正如我之前提到的,允许匿名用户只需知道他们的电子邮件地址就可以重置任何人的帐户,这是一种等待发生的拒绝服务攻击。它可能不是我们通常认为的 DOS,但是没有比设计不佳的密码重置功能更快的方法来锁定某人的帐户。

安全问题是最常用的弱识别方法。有关安全问题的更多详细信息,请参阅Wikipedia 文章

我首先要说我不知道​​这方面是否存在最佳实践,但我会继续回答,并考虑两种观点;安全视图和用户视图...

首先,当提出密码请求时,不应删除密码。如果您的用户突然记住了他们的密码怎么办?他们应该能够在没有影响他们体验的重置请求的情况下登录。相反,应该生成一次性安全(大量熵)生成的随机字符串并将其与用户一起存储为最后的重置请求标识符。还应存储时间戳。然后,用户在电子邮件中单击的链接应包含该准时代码和他们的电子邮件地址,以便实际重置。您还可以检查设置的时间戳以查看请求是否在过去 15 分钟左右发出(仅作为示例)。另一点是,如果这个人真的没有请求,他们应该仍然可以登录。

其次,限制这种情况的最佳方法是使用 reCaptcha 之类的东西。用户不断发送垃圾邮件会很烦人。

第三,我认为没有必要在特定时间窗口内发送超过 2 封电子邮件。

我认为这里更大的安全风险是有人暴力破解您的忘记密码页面以发现帐户登录信息。能够检测到有人在强制您的“忘记密码”页面将是巨大的。可能会记录来自特定 IP 地址的帐户重置请求的数量,并观察该数量在特定时间内何时变得过高,并要求此人发送电子邮件至 help@yourdomain.com 以重置其帐户。[你会想在这里玩这些数字,因为你需要考虑坐在 NAT 后面的人,特别是大公司的员工......你永远不知道每个人什么时候会在同一天忘记他们的密码]。