我正在寻找一种好的,廉价的方法来防止我的ASP.NET MVC网站上的拒绝服务攻击。
我一直在考虑一个拦截HttpHandler然后在Cache对象中计算请求的解决方案,其中的密钥类似于“RequestCount_ [IpAddressOfRequestClient]”,但这似乎会产生一个疯狂的开销。
任何想法都将不胜感激。谢谢!
答案 0 :(得分:4)
您可能会考虑尝试限制请求。通过IP和/或cookie识别用户,并将请求限制为(比方说)每两秒钟1次。人类不会注意到,但这会大大减慢机器人的速度。
这有助于应用程序级别(保护您的应用程序/数据库),但它不是一个完整的解决方案,因为命中仍然在网络级别。
作为防线的第一线,我可能会依赖硬件。许多ISP提供了一些保护,例如:http://www.softlayer.com/facilities_network_n2.html
答案 1 :(得分:0)
这是一个非常老的问题,但我希望此参考对其他人有所帮助。
现在,我们正在使用“ API Protector .NET ”(https://apiprotector.net)来保护我们的API免受DoS和DDoS攻击。
这也是一个与 MVC,WebApi和.NetCore 兼容的库,这给我们非常好的结果,两者都简单,但是基本上是可维护性。有了这个lib,您就可以用一行代码,以一种非常特定的方式来保护您的API的每个功能。
如API Protector .NET网站中所述:
如果通常将API限制为每个IP或每个N个请求 用户,对于这N个请求就可以不断使用 影响相同的特定重功能,可能会严重减慢速度 整个服务。
“ API的每个功能必须在 具体方法取决于正常使用频率和成本 该功能对服务器意味着的处理量,否则 您没有保护您的API。”
API Protector .NET允许您保护.NET的每个功能 轻松应对DoS和DDoS攻击的API, 声明和可维护的方式。
唯一的缺点是它的价格为5美元,但它以非常低的价格为我们提供了我们想要的东西,这与WebApiThrottle库不同,尽管它是我尝试的第一个选择(因为它是免费的),所以当我们想以特定的方式保护不同的功能时,它就变得不切实际,难以维护(如所解释的那样,对于有效的保护至关重要)。
API Protector .NET允许组合不同的保护(按IP,按用户,按角色,一般来说,等等)用单个行装饰每个功能,这使得易于使用实施和维护。有关详细说明,请阅读:https://apiprotector.net/how-it-works
那是一个有趣的故事,当我们仍然使用WebApiThrottle保护我们的API 时,我们进行了一些模拟DDoS攻击的测试,其中包含来自不同主机的许多并行请求,并且出于某种原因,(认为这是由于与线程同步有关的事情),功能中出现了大量请求,并且在服务器已经超载之后,限制开始了。加上难以维护的特性,这并没有给我们提供足够的信心来提供可靠的保护,这就是为什么我们最终尝试了这种效果很好的替代方法。