首页 > 解决方案 > 如何修复 IIS 上的 HTTP 请求走私

问题描述

在我的 ASP.NET MVC 应用程序中,我想解决 HTTP 请求走私漏洞问题。

我认为如果我阻止具有“Transfer-Encoding:chunked”标头的请求就足够了。在 IIS 管理菜单上,我为此添加了新的请求过滤规则。然而,这似乎并没有解决。

我编写了少量 .NET 代码来测试 IIS 在发送分块内容时是否生成 404 错误。当我将传输编码头 1 次添加到我的测试客户端代码中时,我没有收到 404,我收到 200。

httpRequest.Headers.Add("Transfer-Encoding", "chunked");

有趣的是,我将标题添加了 2 次(我的意思是复制它)为

httpRequest.Headers.Add("Transfer-Encoding", "chunked");
httpRequest.Headers.Add("Transfer-Encoding", "chunked");

过滤规则适用,我收到了 404,正如我所料。

我该如何解决?

标签: asp.net-mvchttpiis

解决方案


几个月后,微软添加了一个补丁,您可以在其中禁用使用注册表项的请求走私

  1. 单击开始,单击运行,Regedit在打开框中键入,然后单击确定。
  2. 找到并单击以下注册表子项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
  3. DWORD类型值设置DisableRequestSmuggling为以下之一:
    • 设置为 0 以禁用过滤器
    • 设置为 1 以启用过滤器
  4. 退出注册表编辑器。
  5. 重新启动计算机。

推荐阅读