如何确保 X-HTTP-Method headers 被忽略?

How do I ensure that X-HTTP-Method headers are ignored?

我目前正在为第三方软件发现的漏洞应用安全修复程序。 This is the issue (Often Misused: HTTP Method Override vulnerability).

来自软件的请求类似于:

POST /Home/ViewProfile HTTP/1.1
Referer: https://somesite.com/Home/ViewProfile?qrystr=blahblah
[...]
X-HTTP-METHOD: PUT
X-HTTP-Method-Override: PUT
X-METHOD-OVERRIDE: PUT
[...] 

响应是:

HTTP/1.1 200 OK
[...]

Web 应用程序不是 RESTful API,它只是一个 ASP.NET MVC 站点,只有 GET 和 POST 操作。

我有几个问题:

  1. 鉴于应用类型,这是误报吗?
  2. 默认情况下,ASP.NET 是否对这些 headers X-HTTP-Method、X-HTTP-Method-Override 执行任何操作,X-METHOD-OVERRIDE 如果没有明确告知这样做如 this example?
  3. 关于上面的第一个相关问题,如果根据我的情况necessary/applicable,那么实现推荐补救措施的最佳方法是什么:
    “确保只允许所需的 headers,并且正确配置允许的 headers。”

    “确保没有实施任何解决方法来绕过 user-agents、框架或 Web 服务器实施的安全措施。”

另一件需要注意的事情是我无权修改 IIS 设置,但我可以修改 Web.Config。

我的安全团队扫描时遇到了同样的问题。我所做的是在 web.config 中将这些请求的大小限制为零 (0)。然后服务器 returns 一个“HTTP 错误 431.0 - 请求 Header 字段太大”,有效地阻止了覆盖。

 </system.webServer>
    ...
 <security>
      <requestFiltering>
        <requestLimits>
          <headerLimits>
            <add header="X-Http-Method-Override" sizeLimit="0" />
            <add header="X-Method-Override" sizeLimit="0" />
            <add header="X-HTTP-Method" sizeLimit="0" />
          </headerLimits>
        </requestLimits>
        ...
      </requestFiltering>
    </security>
   ...
  </system.webServer>

但是,我还没有检查这是否有效地取消了安全扫描器的警报。我怀疑它可能仍会显示,但我已准备好报告为误报,因为服务器正在阻止与那些 headers 的所有调用。我会在收到安全团队的回复后立即通知您。