13

我正在开发一个 asp.net MVC Web 应用程序,客户要求我们尽最大努力使其尽可能地抵御拒绝服务攻击。他们担心该站点可能会收到恶意的大量请求,以减慢/关闭该站点。

我已经与产品负责人讨论过这个问题,因为它确实超出了实际 Web 应用程序的范围。我相信托管/网络团队有责任监控流量并响应恶意请求。

然而,他们坚持认为应用程序应该内置一些预防措施。不过,他们不想实施 CAPTCHA。

有人建议我们限制在给定时间范围内可以为会话发出的请求数量。我正在考虑做这样的事情 在 ASP.NET MVC 中实现请求限制的最佳方法?但是使用会话 ID 而不是客户端 IP,因为这会给来自公司防火墙后面的用户带来问题——他们的 IP 都是相同的。

他们还建议添加关闭站点某些区域的功能 - 建议管理员用户可以关闭数据库密集区域......但是这将通过 UI 进行控制,如果它受到 DOS 攻击,管理员肯定会无论如何,用户将无法访问它。

我的问题是,这样做真的值得吗?当然,真正的 DOS 攻击会更先进吗?

你有什么其他的建议?

4

3 回答 3

8

拒绝服务攻击几乎可以是任何会影响您对其他人的服务稳定性的攻击。在这种情况下,您谈论的是网络 DoS,并且如前所述,这通常不会发生在您的应用程序级别。

理想情况下,这种攻击将在网络级别得到缓解。有专门为此构建的防火墙,例如Cisco ASA 5500 系列,它的工作方式从基本保护到高吞吐量缓解。它们是非常聪明的盒子,我可以保证它们在阻止此类攻击方面的有效性,只要使用正确的吞吐量模型即可。

当然,如果无法访问为您执行此操作的硬件防火墙,您可以采取一些权宜之计来帮助防御这些类型的攻击。请注意,这些都不会像专用防火墙那样有效。

一个这样的例子是 IIS 模块动态 IP 限制,它允许您定义最大并发请求的限制。然而,在实践中,这有一个缺点,它可能会开始阻止来自浏览器的合法请求,这些浏览器对于下载脚本和图像等具有高并发请求吞吐量。

最后,你可以做的事情真的很粗糙,但也有效,就像我之前写的一样。基本上,它是一个小工具,用于监控来自同一 IP 的重复请求的日志文件。因此,假设 10 个请求/Home超过 2 秒1.2.3.4。如果检测到这种情况,将添加防火墙规则(在 Windows 高级防火墙中,使用 shell 命令添加)以阻止来自该 IP 的请求,然后可以在 30 分钟左右后删除该规则。

就像我说的那样,它非常粗糙,但是如果您必须在服务器级别执行此操作,那么您实际上并没有很多明智的选择,因为它不应该在其中完成。您完全正确,因为责任在一定程度上取决于托管服务提供商。

最后,您对 CAPTCHA 的看法也是正确的。如果有的话,它可以通过一遍又一遍地执行图像生成(这可能是资源密集型)来协助 DoS,从而使您的资源更加匮乏。验证码生效的时间是,如果您的网站被自动注册机器人发送垃圾邮件,但我相信您已经知道这一点。

如果您真的想在应用程序级别做某事只是为了取悦现有的权力,那么在您的应用程序中实施基于 IP 的请求限制是可行的,尽管 90% 无效(因为您仍然必须处理请求)。

于 2013-02-05T12:11:37.307 回答
2

如果您绝对必须熬夜,您可以在云中实施解决方案并扩展服务器,但它可能会变得昂贵......

另一个想法是记录注册用户的 IP 地址。在 DOS 事件中,将所有流量限制为来自“好”用户的请求。

于 2013-02-05T11:30:39.490 回答
2

在应用程序级别防止真正的 DoS 攻击是不可行的,因为请求很可能会在它杀死您的应用程序之前杀死您的网络服务器,因为您的应用程序与一个应用程序池相关联,该应用程序池再次具有最大并发请求由您使用的服务器技术定义。

这篇有趣的文章 http://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45 指出 windows 7、windows Vista 和 Windows 8 最多有 10 个并发要求。它进一步说明了“您将需要一个 Windows 服务器操作系统才能看到高负载下异步方法的好处”。

您可以增加与您的应用程序关联的应用程序池的 HTTP.sys 队列限制,以增加将排队的请求数量(以便在线程准备好时进行后续计算),这将阻止 HTTP 协议栈(HTTP .sys)在超出限制并且没有工作进程可用于处理进一步请求时返回 Http 错误 503。

您提到客户要求您“尽最大努力使其尽可能抵御拒绝服务攻击”。我的建议可能不适用于您的情况,但您可以考虑实施文章中提到的基于任务的异步模式 (TAP) 以满足客户的要求。

此模式将在执行长期操作时释放线程并使线程可用于进一步的请求(从而使您的 HTTP.sys 队列保持较低)-同时还为您的应用程序提供了在向第三方服务发出多个请求时提高整体性能的好处或执行多个密集的 IO 计算。

此措施不会使您的应用程序对 DoS 攻击具有弹性,但它会使您的应用程序对提供服务的硬件尽可能负责。

于 2013-02-05T20:50:09.153 回答