首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >限制登录尝试

限制登录尝试
EN

Stack Overflow用户
提问于 2009-02-20 16:11:31
回答 5查看 16.3K关注 0票数 19

(这在原则上是一个与语言无关的问题,尽管在我的例子中我使用的是ASP.NET 3.5)

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

  • 处理OnLoginError事件,并在Session中维护
  • 的失败登录尝试计数,当此计数达到某个可配置值时,会阻止来自始发IP地址或该用户/那些用户的进一步登录尝试,持续1小时的

这听起来像是一种明智的方法吗?我是不是错过了一种可以绕过这种检查的明显方式?

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

编辑

这是一个只会在英国和印度使用的管理网站

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-20 16:21:15

Jeff Atwood提到了另一种方法:不是在多次尝试后锁定帐户,而是增加时间,直到允许再次尝试登录:

代码语言:javascript
复制
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

这将降低此保护措施被滥用于拒绝服务攻击的风险。

请参阅http://www.codinghorror.com/blog/archives/001206.html

票数 17
EN

Stack Overflow用户

发布于 2009-02-21 15:02:01

你想做的最后一件事是把所有不成功的登录尝试都存储在一个数据库中,这将足够好地工作,但也会使DDOS攻击变得非常微不足道,从而使你的数据库服务器瘫痪。

您可能正在are服务器上使用某种类型的服务器端缓存,memcached或类似的。这些都是通过IP地址和/或用户名跟踪失败尝试的完美系统。如果失败的登录尝试超过了某个阈值,那么您可以决定停用数据库中的帐户,但您将为不需要保留的失败登录计数器保存对持久存储的大量读取和写入。

如果你试图阻止人们进行暴力强制认证,像Gumbo建议的节流系统可能效果最好。它将使攻击者对暴力暴力攻击失去兴趣,同时在正常情况下甚至在攻击进行时将对合法用户的影响降至最低。我建议只计算memcached或类似的IP不成功的尝试,如果你成为极端分布式暴力暴力攻击的目标,你总是可以选择也开始跟踪每个用户名的尝试,假设攻击者实际上经常尝试相同的用户名。*只要尝试不是非常分散的,由于仍然来自数量可观的IP地址,初始的按IP代码应该足以阻止攻击者。

防止来自IP地址数量有限的国家的访问者出现问题的关键是不要将阈值设置得太严格;如果您在几秒钟内没有收到多次尝试,您可能不必太担心re。脚本暴力。如果你更关心的是有人试图手动破解其他用户的密码,你可以通过用户名为后续失败的登录尝试设置更宽的界限。

另一个建议,虽然没有回答你的问题,但有一定的相关性,那就是对你的最终用户实施一定级别的密码安全保护。我不会过分要求大小写混合的密码,至少x个字符,非字典等,因为你不想在人们还没有注册的时候给他们带来太多麻烦,但简单地阻止人们使用他们的用户名作为密码应该会对保护你的服务和用户免受最简单的攻击(猜猜他们为什么叫他们蛮力;)有很大的帮助。

票数 15
EN

Stack Overflow用户

发布于 2009-10-24 00:43:26

可接受的答案会在连续的登录尝试中插入越来越多的延迟,根据它的实现方式,它在ASP.NET中的性能可能会非常差。ASP.NET使用线程池为请求提供服务。一旦这个线程池耗尽,传入的请求将被排队,直到有线程可用。

如果使用Thread.Sleep(n)插入延迟,则会在延迟期间占用一个ASP.NET线程池线程。此线程将不再可用于执行其他请求。在这种情况下,一个简单的DOS风格的攻击就是不断提交您的登录表单。最终,每个可用于执行请求的线程都将处于休眠状态(并且持续时间越来越长)。

我能想到的正确实现这种延迟机制的唯一方法是使用异步HTTP处理程序。参见Walkthrough: Creating an Asynchronous HTTP Handler。实现可能需要:

  1. 在BeginProcessRequest期间尝试身份验证,并确定失败时的延迟
  2. 返回一个IAsyncResult,该WaitHandle将在延迟
  3. 之后触发。
  4. 确保已在EndProcessRequest

中触发(或阻止,直到触发) WaitHandle

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/570160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档