我希望在用户丢失密码时实施重置密码功能。但是我担心有人能够针对不属于他的单个或多个电子邮件地址提出大量这些请求,这对于这些地址的实际所有者来说会很烦人,我最终会被列入黑名单。
我可以采取哪些措施来保护此功能?设置每个ip发送的有效电子邮件的限制? (我猜最多3封电子邮件就好了)
答案 0 :(得分:4)
为什么不直接在密码重置请求表单中添加CAPTCHA?然后,您可以限制每个电子邮件地址和每天/每周/每月的请求数量,但CAPTCHA会让机器人远离。
答案 1 :(得分:2)
假设您正在编写一个旨在用于互联网的应用程序,您无法控制用户的注册,您可以设置对用户帐户尝试的密码重置尝试次数的滚动限制。
滚动限制将用于确保在短时间内不发送太多密码重置请求。您可以限制用户发出3个密码重置请求,但仅限1小时内,或者甚至可能是1天;您的企业应该能够确定最佳价值,特别是如果用户也可以通过其他方式(通过发送电子邮件或致电服务台)发出密码重置请求。
此外,您可以将生成的令牌(我假设您使用每封邮件发送密码重置令牌)与预定义的到期日期相关联,并且所有此类令牌只能使用一次。理想情况下,令牌不应超过几个小时。除了通常的身份验证尝试之外,高度敏感的应用程序还会审核所有密码重置请求。
最后,您还可以对源自某个IP的密码重置请求数量设置限制(这是DoS预防攻击,不会对DDoS攻击起作用)。不用说,但是如果尝试重置密码,则不应在过渡时禁用相关帐户。这样做可以实现成功的DoS攻击,攻击者可以通过简单地针对已知的电子邮件ID数据库发出密码重置请求来禁用帐户。您必须在确定限制时考虑ISP代理,否则您可能在此过程中伤害了一些客户。
答案 2 :(得分:1)
我见过其他网站资源引入了一个新的密码重置系统(比CAPTCHA好得多),它提供了某种形式的2FA(双因素身份验证),您可以在其中作为备份进行远程登录。用户获得一次性密码发送到他们的单元格,并进入其中。没有垃圾邮件过滤器处理,验证码表格重新加载等...更容易。防止批量注册,垃圾邮件,并且通常比其他解决方案更有效和用户友好。
答案 3 :(得分:0)
请注意IP的设置限制。您经常有一个互联网网关通过单个IP(即公司网络)暴露大量用户。
如果您担心重置特定地址的请求数量,这更多是可用性问题,而不是安全问题。我倾向于定义一个可接受的速率,它平衡不允许太多的重置请求而不会使执行重置太难(即原始电子邮件陷入垃圾邮件,因此请求另一个)。例如,记录请求的时间,不再允许另一个请求15分钟。
但实际上,我不会太担心这个。有很多方法可以通过电子邮件与某人联系,如果你真的想这样做,除非有一些特别有吸引力的利用你的重置功能,我只是做大多数网站所做的事情,并允许在需要时重置,只有在实际重置密码之后用户收到电子邮件并对其进行操作。答案 4 :(得分:0)
忘记密码页面保护:
输入无效电子邮件时显示成功消息。当有人输入无效电子邮件时,告诉用户重置密码链接已发送至您的电子邮件(但实际上不会该代码可以执行任何操作)。这样可以防止黑客试图识别系统上的有效帐户。
使用验证码短语。为避免恶意脚本触发大量电子邮件的大量重置密码请求。
特定电子邮件的重置密码链接每小时发送的次数不应超过3次(或如此)。这样可以防止数据库中存储太多的重置链接并填充数据磁盘,从而淹没数据库。