我们有一个处理用户上传文件的 ASP.NET 应用程序。 浏览器发送(多部分)POST 请求。我们有一个简单的 HttpHandler 并使用 HttpRequest.Files 来访问上传的文件。它在 Windows 2008 R2 上的 IIS7.5 上运行。
有时,我们会看到集合包含 0 个文件的错误。在检查 HttpRequest.InputStream 后,我们看到 我们有一个不完整的 POST 请求。 Content-Length header 指示应该有比实际更多的数据。
我们设法使用 Fiddler 重现它: - 发送 requestBody < Content-Length 的请求。 - 应用程序在第一次引用 HttpRequest.Params 时挂起。 - 终止 Fiddler,关闭连接并恢复应用程序。作为正文的应用程序逻辑不完整(0 个文件)。
我认为这是我们必须处理但无能为力的情况。毕竟浏览器可能随时关闭连接。
我想知道是否有一些开关可以防止 IIS 将不完整的 POST 请求移交给应用程序层(即一些缓冲区)。这将消除 ApplicationLayer 错误监控中的一些噪音。
谢谢, 彼得
最佳答案
据我所知,通过黑客攻击“Slow HTTP Post”拒绝操作系统服务 (DoS) 攻击可以轻松达到 IIS 强加的任何限制。 黑客创建了多个发送小的不完整请求的服务实例(没有 .RequestBody CRL 终止)。
这种攻击打开了等待不完整部分的链接。如果机器人这样做,它永远不会发送剩余部分,超过返回“拒绝服务”的限制。
您上传的文件可能是 0 字节,因为该站点可能受到攻击而无法完成请求。
无论如何要防止 DoS 攻击需要以编程方式检查不完整的请求并杀死它们
看这里
http://omaralzabir.com/prevent_denial_of_service__dos__attacks_in_your_web_application/
关于ASP.NET 和不完整的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17837114/