为什么在IIS7中无法通过web.config文件删除“Server”响应头?

19

删除IIS7中的服务器响应头

我知道如何基于上述链接使用HTTP模块来移除Server响应头。

我只是想知道为什么需要以这种方式将其移除。

6个回答

9
以下方法适用于我:
在IIS 10.0 (Windows Server 2016/2019)中,您可以通过配置web.config system.webServer节点中的requestFiltering来删除服务器标头:
<security>
  <requestFiltering removeServerHeader ="true" />
</security>

这样你就不需要纠结于复杂的出站重写规则。

要移除ASP.NET的X-Powered-By头,仍需要如上所述的customHeaders部分。

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


8

Aristos的评论很好地回答了为什么不允许轻易修改此值。

这归结于微软不希望人们轻易地修改此值,无论出于营销或其他目的,都可以自行解释。

从那次讨论中可以得出一个重要结论,即修改服务器标头对于任何安全方面都没有用处。有无数种方法可以检测到正在运行的Web服务器软件的类型(和版本)。

这只留下了一个原因:节省字节数。除非您运行的是极高流量的站点,否则这不是一个问题。如果您正在运行高流量站点,则很可能已经运行了一个或多个自定义模块。


2
尽管删除它几乎肯定属于“安全戏剧”而不是“实际安全”,但很常见的渗透测试要求删除此类外部标头,这些标头会标识系统配置。 - Owen Blacker
3
我开发移动网站,我同意安全性的论点,但认为出于节省空间的考虑而移除安全措施对于那些不必要地消耗带宽的客户是有意义的。让我们成为联网世界的良好公民,尊重我们的用户和我们依赖的基础设施。 - Norman H
1
@OwenBlacker 多年之后,我不同意这篇文章。删除此标题并不是为了防止专门的攻击者找出正在运行的软件。删除标题是为了阻止由自动脚本运行的机会主义驱动的入侵攻击。当人们保留此标题时,发现数百个易受攻击的Web服务器要容易得多。 - Mateusz
1
@Mateusz 说得好,很有道理;你是对的。 - Owen Blacker

2

这个例子并没有真正删除“server”头,只是在上面写了其他内容。

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

如果你想知道为什么要这样做,这并不是唯一的方法,你可以去你的 Web 服务器并从初始头部中将其删除。

如果你想知道为什么要使用 IHttpModule + PreSendRequestHeader,因为这是抓取头部的初始部分并在 iis 之前放置“server”头的方法。

希望这有所帮助。


1
不,"如何发送自定义'Server' http头"不是我要找的...我已经知道如何做了。我想知道的是为什么需要在HttpModule中为"Server"这个头部这样做,而其他可以通过web.config(<remove name="whatever" />)添加/删除的头部却不需要。 - David Murdoch
@David,这是你另外问的问题(我现在不确定是否能回答),而你主要问题的答案是我已经写了。 - Aristos
1
在我提出的问题中:“我只是想知道为什么需要以这种方式删除[‘服务器’标头]。” 谢谢你的回答! - David Murdoch

1
您可以通过在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>

0

去除这些头部的基本想法如下:

  1. 出于安全原因。攻击者很难确定软件(版本)和支持站点的Web服务器。
  2. 它减少了服务器端生成到浏览器的数据大小。

阅读有关检查Http响应标头的更多信息


-3

Response.Headers.Set("Server", "My Awesome Server"); 在页面代码后端中运行良好,只要您的应用程序池设置为“集成管道模式”。

基本上,IPM是专门为了让IIS管道与ASP.NET管道集成以允许执行此类操作而设计的。请参见Mehrdad Afshari's Answer进行讨论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接