我计划开发一个使用MVC4和Web APi的互联网网站。它是一个简单的应用程序,它将根据搜索显示客户信息。
对于搜索功能,我使用Ajax get方法调用webApi(我知道我应该使用Post,但考虑到这是当前的实现)。
我的Api调用是“/Api/Data/getSearchResults/?companyName='”companyName
我觉得这段代码可以被用作DOS攻击来关闭我的服务器。我有办法使用微软反XSS库或ValidateAntiForgeryToken属性或任何其他机制来确保请求是由真实用户而不是任何汽车人生成的吗?
我的网站启用了匿名访问。
有一个名为WebApitThrottle的库,它定义了一个<code>ThrottlingHandler</code>,您可以使用它根据调用者的IP或其他属性以编程方式限制每秒/分钟/小时的请求数。
另一种选择是在 IIS 级别执行操作,当然,您可以使用两者来获得更好的控制。
这是一个非常古老的问题,但我希望这个参考对其他人有所帮助。
现在我们正在使用“API Protector.NET”(https://apiprotector.net)以保护我们的API免受DoS和DDoS攻击。
它是一个与MVC、WebApi和. NetCore兼容的库。NetCore也是如此,这给我们带来了非常好的结果,无论是在简单性方面,还是在可运维性方面。使用这个库,您可以用一行非常具体的方式来保护API的每个功能。
正如API Protector .NET网站中所解释的那样:
如果您通常将 API 限制为每个 IP 或每个用户的 N 个请求,则这 N 个请求可用于不断影响相同的特定繁重函数就足够了,这可能会严重减慢整个服务的速度。
“API的每个功能都必须以特定的方式受到限制,具体取决于正常的使用频率以及该功能对服务器意味着的处理成本,否则您将无法保护您的API。
API保护器。NET允许你保护你的。NET API来抵御DoS和DDoS攻击,毫不费力,在一个简单的,声明性和可维护的方式。
唯一的缺点是它的成本是5美元,但它以非常低的价格提供了我们想要的东西,不像WebApitThrottle库,虽然它是我尝试的第一个选项(因为它是免费的),但当我们想以特定的方式保护不同的功能时,它最终是不切实际的,无法维护(正如所解释的,这对于有效保护至关重要)。
API Protector.NET允许组合不同的保护(按ip、按用户、按角色、一般等),用一行代码装饰每个函数,这使得实现和维护变得容易。详细解释如下:https://apiprotector.net/how-it-works
一个有趣的轶事是,很久以前,当我们仍在使用WebApitThrottle保护我们的API时,我们做了一些模拟DDoS攻击的测试,来自不同主机的许多并行请求,出于某种原因(我认为这是由于与线程同步相关的原因),函数中出现了大量请求,后来由于服务器已经过载,限制开始了。这增加了难以维护性,并没有给我们太多的信心来提供可靠的保护,这就是为什么我们最终尝试了这个可行的替代方案。
我假设DOS攻击是指对您的系统的攻击,在这种攻击中,由于不断对数据库执行公司搜索查询,不断发出请求以导致资源耗尽。
为了帮助防止这种情况,您可以记录每个请求的远程IP地址,并限制响应,以便每分钟只为每个IP地址提供这么多服务。任何附加请求都可以通过人工延迟(例如< code >线程)来满足。Sleep())。这种方法在抵御DDoS攻击时会受到更大的限制,因为远程IP地址的范围很广,并且还假设您的IP地址查找比公司搜索占用的资源少,但它仍然会有所帮助。
MS Anti-XSS只会保护您免受跨站脚本攻击,不会保护您免受DoS/DDoS攻击。防伪造令牌只能保护你免受跨站点请求伪造——即使你有令牌,机器人也可以简单地请求你的页面获取令牌,然后提交给你的API函数。
验证码可能是另一种解决方案,但您需要他们在您的网页中输入验证码,然后在您的API Web方法中对其进行验证。