我们有一个处理用户上传文件的ASP.NET应用程序。 浏览器发送(多部分)POST请求。 我们有一个简单的HttpHandler,并使用HttpRequest.Files来访问上传的文件。 它在Windows 2008 R2上的IIS7.5上运行。
偶尔,我们看到收集包含0个文件的错误。 在检查HttpRequest.InputStream后,我们看到我们有一个不完整的POST请求。 内容长度标题表明应该有更多的数据,比现在。
我们设法使用Fiddler重现它: – 发送requestBody <Content-Length的请求。 – 应用程序挂起对HttpRequest.Params的第一个引用。 – 终止Fiddler,closures连接和应用程序恢复。 作为正文的应用程序逻辑是不完整的(0个文件)。
我认为这是一个我们必须处理的情况,不能做太多的事情。 毕竟浏览器可能随时closures连接。
我不知道是否有一些交换机会阻止IIS将不完整的POST请求交给应用层(即某些缓冲区)。 这将消除ApplicationLayer错误监视中的一些噪音。
谢谢,彼得
对于我所知的任何限制IIS的限制都可以通过黑客“慢HTTP POST”拒绝服务(DoS)攻击轻松达成。 黑客创建了多个发送小的不完整请求的服务实例(没有.RequestBody CRL终止)。
这种攻击留下了不完整部分的链接。 如果一个机器人这样做,它永远不会发送剩余部分,超过返回“拒绝服务”的限制。
可能由于网站可能受到攻击而无法完成请求,因此上传的文件为0字节。
在任何情况下,为了防止DoS攻击,需要以编程方式检查不完整的请求并杀死它们
看看这里
http://omaralzabir.com/prevent_denial_of_service__dos__attacks_in_your_web_application/