ASP.NET 和不完整的 HTTP 请求

标签 asp.net .net windows http iis-7.5

我们有一个处理用户上传文件的 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/

相关文章:

c# - 如何使用 c# 将缺少分隔符的字符串解析为 DateTime?

c# - 无法加载文件或程序集 'sapnco' 或其依赖项之一。试图加载格式不正确的程序

c# - 使用 MS Access 作为 .NET 应用程序后端

c# - RestSharp 反序列化为 List<MyClass>

Windows批处理脚本删除文件夹中除一个以外的所有内容

c# - 从同一网络上的另一台 PC 测试 wcf web 服务

asp.net - 无法在 Asp.net 中保存 session

c# - Windows 身份验证在部署 MVC 站点时不起作用

c# - 使用 HockeyApp(Windows) 发送已处理的异常报告

windows - 如何以编程方式获取 vmmap 中显示的信息?