【问题标题】:Remove Server Response Header IIS 8.0 / 8.5删除服务器响应标头 IIS 8.0 / 8.5
【发布时间】:2014-04-19 12:30:25
【问题描述】:

如何在 IIS 8.0/8.5 中删除服务器头响应?
我当前的服务器报告: Microsoft-IIS/8.0 Microsoft-IIS/8.5
对于 IIS 7.0,我使用了 URLScan 3.1,但是这仅支持 IIS 7.0 而不是 8.x

【问题讨论】:

  • 有些人已经回答了here
  • @Frederic,是的,适用于 IIS 7.0,但这里的这个线程适用于 IIS 8.0/8.5,并且那里不支持 URLScan。
  • 链接指向 URLRewrite 解决方案,而不是 URLScan。 UrlRewrite 在 IIS 8 下运行良好(甚至更好,因为更新已在 IIS 控制台中恢复其 UI;以前我们只能通过 web.config 直接设置它)。

标签: iis http-headers httpresponse


【解决方案1】:

还有另一种解决方案,我认为这个解决方案是最好和安全的。

您可以使用微软创建的UrlRewrite 模块。 Url Rewrite 模块重定向您的 url,还可以在响应标头中更改您的 IIS 服务器名称。

您不必使用重定向属性。您可以使用仅更改服务器标头值。

步骤如下:

  1. 首先,从这个链接下载 UrlRewrite 模块: http://www.iis.net/downloads/microsoft/url-rewrite 并安装 它在您的 IIS 服务器上。之后,在cmd上通过这个命令重启IIS 控制台

    iisreset /restart
    
  2. 将以下项目添加到您的 Web 配置文件中的 <system.WebServer> 标记下。您可以将任何内容作为服务器名称写入 Value 项。

  3. 最后,我们更改了数据标题上的 IIS 版本名称。再次重新启动 IIS。通过 cmd 控制台。

  4. 奖励:如果您想测试您的网站以查看它是否正常工作...您可以使用“HttpRequester”mozilla firefox 插件。对于这个插件:https://addons.mozilla.org/En-us/firefox/addon/httprequester/

PS:我对其进行了测试,它在 IIS 服务器上对我有用。 Visual Studio 尚未创建临时 IIS 服务器。

【讨论】:

  • 问题是,URL 重写需要服务器资源(例如 CPU)。因此,如果您有一个执行大量请求的系统,例如 Microsoft Exchange (EAS) 服务器,那么 URL 重写可能会给您的用户带来严重的延迟......
  • 现在有更好的方法(至少在 IIS 10+ 中):stackoverflow.com/a/53225082/1671558
  • 如何在 IIS 8 中关闭服务器签名..??
  • @AbijithAjayan “UrlRewrite”模块的功能太多了。我强烈推荐它来玩。
  • 它仅适用于 POST 和 GET 请求 ..server 标头仍显示 PUT 和 TRACE METHOD 的 IIS 版本
【解决方案2】:

不幸的是,您在网上找到的大部分关于删除 IIS 中的“服务器”标头的建议都不适用于 IIS 8.0 和 8.5。我找到了唯一可行的选择,在我看来,也是最好的选择是使用 IIS Native-Code 模块。

本机代码模块不同于更常见的托管模块,因为它们是使用 win32 API 而不是 ASP.NET 编写的。这意味着它们适用于所有请求(包括静态页面和图像),而不仅仅是通过 ASP.NET 管道过去的请求。使用 Native-Code 模块,可以在请求的最后删除不需要的标头,这意味着您可以删除标头(包括“服务器”标头),无论它们是在哪里设置的。

以下文章中提供了用于在 IIS 7.0 到 8.5 中删除标头的示例 Native-Code 模块的二进制文件和源代码。

http://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85

【讨论】:

  • 有效!但是可能会导致an unhandled win32 exception occurred in w3wp.exe错误,已解决here
  • urlrewrite 在 IIS 8.5 中对我不起作用。但是它可以在我的带有 IIS 10 的开发机器上运行。我必须只使用 web.config 而不是服务器端代码来实现它。
【解决方案3】:

现在可以从 IIS 10.0 开始从 web.config 中删除 Server 标头:

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

有关如何删除所有不需要/不必要的标头的更多详细信息,请参见here

请注意,这会像所有其他方法一样从“应用程序”中隐藏服务器标头。如果你例如到达某些默认页面或由 IIS 本身或应用程序外部的 ASP.NET 生成的错误页面,这些规则将不适用。因此理想情况下,它们应该位于 IIS 的根级别,并且可能会给 IIS 本身留下一些错误响应。

在 IIS 10 中有一个 bug,即使使用配置,它有时也会显示标题。现在应该已经修复了,但是 IIS/Windows 必须更新。

【讨论】:

  • 使用 IIS 10+ 时最有效的方法
【解决方案4】:

针对上述问题,在 Global.asax.cs 中添加如下代码

protected void Application_PreSendRequestHeaders() 
   {
       Response.Headers.Remove("Server");
       Response.AddHeader("Sample1", "Value1");
   }

浏览了这么多问题终于解决了。

【讨论】:

  • 此答案是唯一可以删除 IIS 8.5 上 *.axd 请求的“服务器”标头的答案。谢谢!
【解决方案5】:

只需在 web.config 的自定义 headers 段中使用 clear 标记:

<system.webServer>
   <httpProtocol>
      <customHeaders>
           <clear />
            <add name="X-Custom-Name1" value="MyCustomValue1" />
            <add name="X-Custom-Name2" value="MyCustomValue2" />
      </customHeaders>
   </httpProtocol>
</system.webServer>

对于动态标题,您可以在 Global.ascx 中使用此代码:

protected void Application_PreSendRequestHeaders() 
   {
       Response.Headers.Remove("Server");
       Response.AddHeader("Sample1", "Value1");
   }

【讨论】:

  • 这不会阻止使用任何自定义标头吗?
  • @rism 不!您可以在清除标记后添加任何您想要的自定义标题。查看编辑后的答案
  • 哦,当然,但是如果标题是动态的,那么它会被擦除吗?
  • 是的!对于动态标头,您应该使用 Response.Headers.Remove("Server");在 Global.ascx 中的 Application_PreSendRequestHeaders
  • 添加“customHeaders”对我不起作用(IIS 8.0)。它只是添加了第二个“服务器”标头,并保留了原始的“服务器”标头
【解决方案6】:

这很简单。只需创建一个自定义模块:

public class HeaderStripModule : IHttpModule
{
    public void Init(HttpApplication application)
    {
        application.PreSendRequestHeaders += (sender, args) => HttpContext.Current.Response.Headers.Remove("Server");
    }

    public void Dispose(){}
}

如果你想在机器范围内实现,然后注册web.configapplicationHost.config

<system.webServer>
  <modules>
      <add name="HeaderStripModule" type="MyNamespace.HeaderStripModule" />
  </modules>
</system.webServer>

【讨论】:

【解决方案7】:

从 IIS 7.5 开始,URLScan 已停止使用,因为它的功能应该可以通过“请求过滤”选项(IIS 7.5 中添加的功能)提供。

但 URLScan 的“删除服务器标头”选项在“请求过滤”中似乎没有任何等效项。

this answerthis answer to you question 所述,您可以使用 URLRewrite 清空Server,它在 IIS 8/8.5 上仍然可用(在 IIS 管理控制台中具有其 UI 需要一些更新)。

事实证明,查看this blog,如果缺少官方支持不是问题,URLScan 仍然可以安装在 IIS 8/8.5 上。

我还没有测试过自己。步骤如下:

  • 安装 IIS 6 Metabase 兼容性(如果还没有的话)
  • 安装 Isapi 过滤器(如果尚未安装)
  • 安装 URLScan(从可下载的安装程序,而不是从 Web 平台安装程序)
  • 通过其ini 文件配置URLScan(默认在C:\Windows\System32\inetsrv\urlscan 中)

也许应该进行一些iisreset 甚至重新启动。 URLScan 应该在 IIS 中的 Isapi 过滤器中可见

【讨论】:

    【解决方案8】:

    在 IIS 管理器的服务器级别,转到“功能”视图。单击 HTTP 响应标头。您可以在那里添加/删除标题。您还可以在站点级别管理响应标头。

    【讨论】:

    • 这个问题专门针对 Server 标头。您的答案仅针对X-powered 等。您无法通过HTTP Response Headers 删除Server
    • @rism 查看我的回答。
    猜你喜欢
    • 2016-05-09
    • 2021-06-13
    • 2010-11-13
    • 2012-09-22
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2021-01-08
    相关资源
    最近更新 更多