限制登录尝试

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

使用的是标准的ASP.NET,并希望实现以下失败的登录尝试节流逻辑。

  • 处理事件和维护登录尝试失败的计数。
  • 当这个数到一些可配置值阻止来自原始ip地址的进一步登录尝试,或阻止该用户/那些用户的进一步登录,时间为1小时。

这听起来像是一种明智的方法吗?我是否遗漏了一个明显的方法,可以绕过这些检查?

注意:ASP.NET会话使用cookie与用户的浏览器相关联

提问于
用户回答回答于
1st failed login    no delay
2nd failed login    2 sec delay
3rd failed login    4 sec delay
4th failed login    8 sec delay
5th failed login    16 sec delay

这将减少这种保护措施可能被滥用于拒绝服务攻击的风险。

用户回答回答于

最不想做的事情是将所有不成功的登录尝试存储在数据库中,这将非常好地工作,但也使得DDOS攻击使数据库服务器崩溃变得非常简单。

可能在你的webserver memcached或类似的服务器端使用某种类型的服务器端缓存,这是通过ip地址和/或用户名跟踪失败尝试的完美系统。如果超过某个失败登录尝试的阈值,则可以决定停用数据库中的帐户,但将将大量读写保存到持久化存储中。不需要持久化的失败登录计数器。

如果你试图阻止人们使用暴力强制认证,Gumbo这样的节流系统可能效果最好,这将使攻击者对暴力攻击毫无兴趣,同时在正常情况下甚至在攻击进行时尽量减少对合法用户的影响。我建议只计算ip在memcached或类似事件中的不成功尝试,如果你曾经成为一个极其分布式的蛮力攻击的目标。攻击时,也可以选择跟踪每个用户名的尝试,前提是攻击者实际上经常尝试相同的用户名。只要尝试不是非常分散,就像仍然来自数量可观的IP地址一样,初始的由IP编码应该可以很好地阻止攻击者。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励