-
05-09-2019 - |
题
(这是在主要语言无关的问题,虽然在我的情况下,我使用ASP.NET 3.5)
我使用的标准ASP.NET 登录控制 并想要实现以下登录失败的尝试限制的逻辑。
- 处理
OnLoginError
事件和维护, 届会, ,计的登录失败的尝试 - 当这个数得到 [一些可配置的价值] 块进一步的登录尝试从原始IP地址或该用户/用户为1小时
这听起来像一个明智的方法?我缺少一个明显的手段,这样的检查可能被绕过?
注:ASP.NET 会议的是相关联的用户浏览器使用一个饼干
编辑
这是一个政府的网站,只会被用于从英国和印度
解决方案
杰夫*阿特伍德 提到的另一种方法:而不是锁定的帐户后,一些尝试,增加时间,直到另一个登录尝试是允许的:
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,缓存或者相似。这些都是完美的系统,用于跟踪失败的尝试通过IP地址和/或用户名。如果某一阈值,用于登录失败的尝试,是超过了然后你可以决定关闭帐户的数据库,但你会被拯救一堆读和写给你的保留储存的登录失败计数器你不需要依然存在。
如果你想阻止人们从强迫身份验证、限制系统,如浓汤建议的可能效果最好。它将使暴力攻击不感兴趣的攻击者,同时尽量减少影响,对于合法用户在正常情况下,甚至在攻击是怎么回事。我建议只计算不成功的尝试,通过知识产权在缓存或类似的,如果你没有成为目标的一个非常分发的暴力攻击,你总是可以选择也开始跟踪尝试的每用户名,假设攻击者实际上是试图相同的用户名是经常。只要尝试不是极端分发,仍然在从数量的IP地址,最初由-IP码应该继续攻击了非常充分。
关键的预防问题的访客从国家数量有限的IP地址是不要让你的门槛太严格;如果你不接收多次尝试在几秒钟,你可能没有太多的担心。脚本蛮强迫。如果你更关心人们试图解开的其他用户密码的手动,可以设置更广泛的界限,对于随后的登录失败的尝试通过用户名。
一个其他的建议,这不能回答你的问题,但是有所相关,是执行一定级别的密码的安全对你的最终用户。我不会过火的需要一个混合的情况下,至少x字,非典,等等。等等。密码,因为你不想错误的人多的时候他们甚至还没有签署,但只是停止人们利用自己的用户名,因为他们的密码应该走很长的路要保护你的服务和用户对最简单–我猜他们为什么叫他们的暴力;)的袭击。
所接受的答案,其中插入增加拖延进入连续登录尝试,可以执行非常不好ASP.NET 取决于它是如何实现的。ASP.NET 使用一线的游泳池服务的请求。一旦该线的游泳池被耗尽,来请求将排队,直到一个线程成为可用的。
如果插入延迟使用螺纹。睡眠(n),您将领带了一个ASP.NET 线的游泳池线程的持续时间延迟。这个线程将不再可用来执行其他请求。在这种情况下一个简单的DOS式攻击将会保持提交登录的形式。最终每个线可用于执行请求将被睡(和用于增加周期的时间)。
只有这样,我可以认为正确地实施这种延迟机制是使用异步HTTP处理程序。看看 演练:创建一步HTTP处理.执行可能会需要:
- 尝试验证过BeginProcessRequest和确定延后失败
- 返回IAsyncResult暴露出一个线程,将触发的延迟之后
- 确保线程已触发的(或者块,直到它已)在EndProcessRequest
这可能会影响你的真正用户。为前。在国象新加坡这样的有限数量的互联网服务提供商和较小的组IPs可用于家庭用户。
或者,你可能会插入一个验证之后x失败的尝试阻挠脚本小子。
我想你会需要保持最外面的话-否则微不足道的攻击是明确的饼干之前,每个登录尝试。
否则计数和锁定是合理的,虽然一个更简单的解决方案可能是必须增加一倍,超时之间每个登录失败。即2秒钟之后的第一个登录尝试,4秒后接下来,8等。
你执行的超时通过拒绝登录在超时期-即使用户提供了正确的密码只是答辩人可读的文本说,该帐户被锁定。
也监视用于同一ip/用户的不同和相同的用户/个不同的知识产权。