如何在 IIS 8 和 10 上删除 Microsoft-HTTPAPI/2.0 标头

如何在 IIS 8 和 10 上删除 Microsoft-HTTPAPI/2.0 标头

我正在尝试删除Microsoft-HTTPAPI/2.0以下是我的 HTTP 响应中的服务器标头这篇文章来自 MSDN。目前,我正在 Windows Server 2008 R2 和 Windows 10 上应用基于注册表的解决方案,但没有成功。每当我发送带有空标头的 HTTP 请求时,我仍然会收到标头Host

curl -X GET "127.0.0.1" -H "Host:" --head

上述命令返回 HTTP 400 Bad Request Server: Microsoft-HTTPAPI/2.0

有没有更新的方法可以删除特定的标头?我知道有人问过这个问题之前适用于 IIS 7(该解决方案可能仍然有效),但重新启动并不能解决我上面提到的两个 Windows 上的问题。

先感谢您。

附言:我知道这是一种隐秘的安全性,但审计人员想要它。

答案1

如果响应的服务器标头返回“Microsoft-HttpApi/2.0”,则表示正在调用 HTTP.sys 而不是 IIS。漏洞和端口扫描会使用此方法对 IIS 服务器进行指纹识别(即使是隐藏了服务器标头的服务器)。

您可以使用 CURL 抛出错误来测试这一点:

curl -v http://www.yourdomain.com/ -H "Range: bytes=00-18446744073709551615"

如果您的服务器正在发送标头,您将看到类似这样的内容:

HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 19 Dec 2019 00:45:40 GMT
Connection: close
Content-Length: 339

您可以添加注册表值,以便 HTTP.sys 不包含标头。

  • 打开 Regedit
  • 导航至:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
  • 如果DisableServerHeader不存在,则创建它(DWORD 32位)并赋值2。如果它存在,并且值不是2,则将其设置为2。
  • 重新启动服务器或通过调用“net stop http”然后“net start http”重新启动 HTTP 服务

参考:WS/WCF:删除服务器标头

添加注册表项后,响应如下所示:

HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Date: Thu, 19 Dec 2019 00:45:40 GMT
Connection: close
Content-Length: 339

在这里发布,以便需要的人可以找到它。(谢谢,Oram!)

答案2

按照 Jeffry 下面的注释操作

  • 打开 Regedit
  • 导航至:Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
  • 如果DisableServerHeader不存在,则创建它(DWORD 32位)并赋值2。如果它存在,并且值不是2,则将其设置为2。
  • 重新启动服务器或通过调用“net stop http”然后“net start http”重新启动 HTTP 服务

请记住重新启动 HTTP 服务,否则此解决方案将不起作用。

在装有 IIS 10 的 Windows 2019 服务器上进行了测试。

相关内容