7

我计划使用 MVC4 和 Web APi 开发一个互联网站点。它是一个简单的应用程序,它将根据搜索显示客户信息。

对于搜索功能,我使用 Ajax get 方法调用 webApi(我知道我应该使用 Post,但考虑这是当前的实现)。

我的 API 调用是“/api/Data/getSearchResults/?companyName='" + companyName

我觉得这条线可以用作DOS攻击来关闭我的服务器。有没有办法我可以使用 Microsoft Anti-XSS 库或 ValidateAntiForgeryToken 属性或任何其他机制来确保请求是由真实用户而不是任何自动机器人生成的。

我的网站启用了匿名访问。

4

3 回答 3

6

有一个名为WebApiThrottle的库,它定义了一个ThrottlingHandler可用于以编程方式限制每秒/分钟/小时的请求数……基于调用者的 IP 或其他属性。

另一种选择是在 IIS 级别进行操作,当然您可以同时使用这两种方法来获得更好的控制。

于 2014-03-13T08:52:08.423 回答
2

这是一个非常古老的问题,但我希望这个参考可以帮助其他人。

现在我们正在使用“ API Protector .NET ”(https://apiprotector.net)来保护我们的 API 免受 DoS 和 DDoS 攻击。

它也是一个与MVC、WebApi 和 .NetCore兼容的库,它给我们带来了非常好的结果,无论是在简单性方面,还是在可维护性方面。使用这个库,您可以用一行代码以非常具体的方式保护 API 的每个函数。

正如 API Protector .NET 网站中所解释的:

如果您通常将您的 API 限制为每个 IP 或每个用户 N 个请求,那么这些 N 个请求可用于不断影响相同的特定繁重功能,从而严重减慢整个服务的速度。

“您的 API 的每个功能都必须以特定方式进行限制,具体取决于该功能对服务器的正常使用频率和处理成本,否则您将无法保护您的 API。”</p>

API Protector .NET 允许您以简单、声明性和可维护的方式轻松保护 .NET API 的每个功能免受 DoS 和 DDoS 攻击。

唯一的缺点是它的成本为 5 美元,但它以非常低的价格为我们提供了我们正在寻找的东西,不像 WebApiThrottle 库,虽然它是我尝试的第一个选项(因为它是免费的),但它最终是当我们想以特定方式保护不同的功能时(如解释的那样,这对于有效保护至关重要),这是不切实际的不可维护的。

API Protector .NET 允许组合不同的保护措施(按 ip、按用户、按角色等),用一行来装饰每个功能,这使其易于实现和维护。有关详细说明,请阅读:https ://apiprotector.net/how-it-works

一个有趣的轶事是,当我们仍然使用 WebApiThrottle 保护我们的 API 时,我们做了一些模拟 DDoS 攻击的测试,来自不同主机的许多并行请求,并且出于某种原因,(我认为这是由于与线程同步有关的事情),大量请求进入函数,并且由于服务器已经超载而迟到了,节流开始了。再加上难维护性,这并没有让我们对可靠的保护有太大的信心,这就是为什么我们最终尝试了这个效果很好的替代方案。

于 2019-05-10T09:54:58.957 回答
1

通过 DOS 攻击,我假设您的意思是对您的系统的攻击,其中不断发出请求以导致由于对您的数据库不断执行公司搜索查询而导致资源耗尽。

为了帮助防止这种情况,您可以记录每个请求的远程 IP 地址并限制响应,这样您每分钟只为每个 IP 地址提供这么多的服务。任何附加请求都可以通过人为延迟来满足(例如Thread.Sleep())。这种方法对于远程 IP 地址范围很广的 DDoS 攻击将更加有限,并且还假设您的 IP 地址查找比公司搜索占用的资源更少,但它仍然会有所帮助。

MS Anti-XSS 只会保护您免受跨站脚本攻击,而不会保护您免受DoS/DDoS 攻击。反伪造令牌只会保护您免受跨站点请求伪造- 即使您有令牌,机器人也可以简单地请求您的页面获取令牌,然后将其提交给您的 API 函数。

CAPTCHA可能是另一种解决方案,但您需要他们在您的网页中输入 CAPTCHA 代码,然后在您的 API Web 方法中对其进行验证。

于 2013-09-30T13:56:25.473 回答