2011-08-19 79 views
2

我想实现重置密码功能,以防用户丢失密码。但是我担心有人能够为单个或多个不属于他的电子邮件地址提出大量请求,这对于这些地址的实际所有者来说会很烦人,而且我最终会被列入黑名单。如何保护重置密码功能?

我该怎么做才能确保这个功能的安全?设置每个IP发送的有效电子邮件的限制? (3封电子邮件,最多将被罚款我猜)

回答

4

为什么不简单地将密码验证码添加到密码重置请求表单中?然后,您可以限制每个电子邮件地址和每天/每周/每月的请求数量,但验证码会让机器人远离。

+0

哦,我忘记了验证码,有一段时间没有使用它们(大多数机器人甚至不发送饼干,所以我的csrf保护足以让它们远离)。谢谢 – HappyDeveloper

0

要小心通过IP设置限制。您经常会有一个互联网网关,通过一个IP(即公司网络)暴露大量用户。

如果你担心做重置特定地址的请求的数量,这是比安全问题更可用性问题。我倾向于定义一个可接受的费率,这个余额不允许太多的重置请求,而不会使得难以执行重置(即,原始电子邮件被垃圾抓住,所以另一个被请求)。例如,记录请求的时间,并且不允许另一个15分钟。

务实不过,我不会太担心这个。如果你真的想要这样做,有很多方法可以通过电子邮件与某人联系在一起,除非利用你的重置功能有什么特别的吸引力,我只是做大多数网站的工作,并允许在需要时进行重置,并且只在实际重置密码后用户收到电子邮件并执行操作。

+0

是的,这就是为什么我发送电子邮件:确认重置。你说我必须记录时间,不允许15分钟。为了谁?对于IP?对于那个会话cookie?那封电子邮件?是的,我知道还有其他威胁。但我一次只能确保一件事。 – HappyDeveloper

+0

如果您担心电子邮件的重置请求过多,请根据该电子邮件限制请求。 –

+0

我的问题是被邮件服务器列入黑名单。 – HappyDeveloper

2

假设你正在编写意在互联网,在那里你无法控制用户的注册所使用的应用程序,你可以在尝试在用户帐户密码重置尝试次数设置滚动限制。

滚动限制将用于确保过多的密码重置请求不是一个短期时间内发送出去。您可以限制用户发出3次密码重置请求,但只能在1小时内或甚至1天内;您的企业应该能够确定最佳价值,特别是如果用户还可以通过其他方式(通过发送电子邮件或致电服务台)发出密码重置请求。

此外,可以将生成的令牌(我假设你与每个邮件发送出去密码重置令牌)与预定的截止日期相关联,并且所有这些标记可能只能使用一次。理想情况下,令牌不应超过几个小时。除了通常的认证尝试之外,高度敏感的应用程序还会审核所有密码重置请求。

最后,你还可以建立从某个IP发起密码重置请求的数量限制(这是一个DOS攻击的预防,不会对DDoS攻击的工作)。不用说,但如果尝试重置密码,则不应在此期间禁用关联的帐户。这样做可以实现成功的DoS攻击,攻击者可以通过简单地针对已知电子邮件ID数据库发出密码重置请求来禁用帐户。在确定限制时,您将不得不考虑ISP代理,否则实际上可能会伤害少数客户。

1

我已经看到其他网站属性引入了一个新的密码重置系统(比CAPTCHA好得多),它提供了某种形式的2FA(双因素身份验证),您可以在其中登录到您的帐户,作为备份。用户获得发送到其单元的一次性PIN码,并将其输入。没有垃圾邮件过滤器处理,验证码表单重新加载,等等...更容易。防止批量注册,垃圾邮件,并且通常看起来比替代解决方案更加有效和用户友好。