为啥不能通过 IIS7 中的 web.config 删除“服务器”响应标头?

Posted

技术标签:

【中文标题】为啥不能通过 IIS7 中的 web.config 删除“服务器”响应标头?【英文标题】:Why can't the "Server" Response Header be removed via web.config in IIS7?为什么不能通过 IIS7 中的 web.config 删除“服务器”响应标头? 【发布时间】:2010-09-09 15:49:45 【问题描述】:

Remove Server Response Header IIS7

我知道如何根据上面的链接使用 HTTP 模块删除 Server 响应标头。

我只是想知道为什么有必要这样删除它。

【问题讨论】:

【参考方案1】:

Aristos link 中的 cmets 很好地回答了为什么。

归结为 MS 不想轻易让人们修改这个值。无论是出于营销目的还是其他目的,都可以解释。

从该讨论中带走的一点是,修改服务器标头对于任何类型的安全性都没有用。您可以通过多种方式准确检测正在运行的 Web 服务器软件的种类(和版本)。

这让我们只有一个理由这样做:节省字节。除非您正在运行一个非常高流量的网站,否则这不是问题。如果您正在运行一个高流量网站,那么您很可能已经在运行一个或多个自定义模块。

【讨论】:

虽然删除它几乎肯定属于“安全剧院”而不是“实际安全”类别,但渗透测试通常要求像这样标识系统配置的无关标头已删除。 我开发移动网站,我同意安全论点,这确实不是安全,但认为为了节省空间而删除它与带宽被不必要的数据占用的客户相关。让我们成为网络世界的好公民,尊重我们的用户和我们所依赖的基础设施。【参考方案2】:

以下内容对我有用:

在 IIS 10.0 (Windows Server 2016/2019) 中,您可以通过在 web.config system.webServer 节点中配置 requestFiltering 来移除 Server 标头:

<security>
  <requestFiltering removeServerHeader ="true" />
</security>

这样您就不必摆弄复杂的出站重写规则。

要删除 ASP.NET 的 X-Powered-By 标头,您仍然需要上面提到的 customHeaders 部分。

来源:https://www.saotn.org/remove-iis-server-version-http-response-header/

【讨论】:

【参考方案3】:

这个例子并不是真的去掉“server”头,只是在上面写点别的。

更好的标题是“IIS7 如何发送自定义“服务器”http 标头”。阅读这篇类似的文章http://blogs.technet.com/b/stefan_gossner/archive/2008/03/12/iis-7-how-to-send-a-custom-server-http-header.aspx

现在,如果您想知道为什么会这样,这不是唯一的一种方式,您可以访问您的网络服务器,然后将其从首字母标题中删除。

如果您想知道,为什么要使用 IHttpModule + PreSendRequestHeader,因为这是您获取初始部分的标头并在 iis 执行此操作之前首先放置“服务器”标头的方式。

希望对您有所帮助。

【讨论】:

嗯,不。 “如何发送自定义 'Server' http 标头”不是我想要的……我已经知道该怎么做。我想知道的是为什么有必要在“服务器”的 HttpModule 中执行此操作,而不是可以通过 web.config (&lt;remove name="whatever" /&gt;) 添加/删除的其他标头。 @David 这是你问的其他问题(我现在不确定给出答案),你的主要问题的答案是我写的。 在我问的问题中:“I just want to know why it is necessary to remove [the 'Server' header] this way.”谢谢你的回答!【参考方案4】:

您也可以通过在 IIS 7+ 的 web.config 文件中添加 outboundRule 来清空该值:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules rewriteBeforeCache="true">
                <rule name="Remove Server header">
                    <match serverVariable="RESPONSE_Server" pattern=".+" />
                    <action type="Rewrite" value="" />
                </rule>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

【讨论】:

【参考方案5】:

删除这些标头的基本思路如下

    出于安全原因。攻击者不容易确定 关于软件(版本)和支持网站的网络服务器。 它减少了服务器端对浏览器产生的数据的大小。

Read more about Inspecting Http Response Headers

【讨论】:

【参考方案6】:

Response.Headers.Set("Server", "My Awesome Server"); 在页面代码隐藏中工作正常,只要您的应用程序池设置为“集成管道模式”。

基本上,IPM 专门用于将 IIS 管道与 ASP.NET 管道集成以允许完成此类事情。请参阅Mehrdad Afshari's Answer 进行讨论。

【讨论】:

以上是关于为啥不能通过 IIS7 中的 web.config 删除“服务器”响应标头?的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS7 上使用 web.config 删除 .php 扩展名

为啥我在 IIS7 上的 WCF Rest 服务会进行两次身份验证?

IIS7.5使用web.config设置伪静态的方法

从 iis7 中的 wordpress URL 中删除 index.php

IIS7,web.config 只允许在网站的 /uploads 目录中使用静态文件处理程序

C# IIS7.0+ Web.Config 配置Session过期时间