删除服务器响应头IIS 8.0/8.5

删除服务器响应头IIS 8.0/8.5,iis,http-headers,httpresponse,Iis,Http Headers,Httpresponse,如何删除IIS 8.0/8.5中的服务器头响应 我的当前服务器报告: Microsoft IIS/8.0 Microsoft IIS/8.5 对于IIS 7.0,我使用了URLScan 3.1,但这仅适用于IIS 7.0,而不适用于IIS 8.x。不幸的是,您可以在网上找到的删除IIS中“服务器”头的大多数建议对于IIS 8.0和8.5都不起作用。我发现唯一可行的选择,在我看来,也是最好的选择,就是使用IIS本机代码模块 本机代码模块不同于更常见的托管模块,因为它们是使用win32 API而不是

如何删除IIS 8.0/8.5中的服务器头响应
我的当前服务器报告:
Microsoft IIS/8.0
Microsoft IIS/8.5


对于IIS 7.0,我使用了URLScan 3.1,但这仅适用于IIS 7.0,而不适用于IIS 8.x。不幸的是,您可以在网上找到的删除IIS中“服务器”头的大多数建议对于IIS 8.0和8.5都不起作用。我发现唯一可行的选择,在我看来,也是最好的选择,就是使用IIS本机代码模块

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

以下文章提供了用于删除IIS 7.0至8.5中的头文件的示例本机代码模块的二进制文件和源代码


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

您可以使用Microsoft创建的URL重写模块。Url重写模块重定向您的Url,还可以在响应头中更改您的IIS服务器名称

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

以下是步骤:

  • 首先,从以下链接下载URL重写模块: 安装 它位于IIS服务器上。之后,通过cmd上的此命令重新启动IIS 控制台

  • 将以下项目添加到web配置文件的
    标记下。您可以将任何内容作为服务器名称写入值项

  • 最后,我们更改了数据头上的IIS版本名。重新启动IIS。通过cmd控制台

  • 奖金:如果你想测试你的网站,看看它是否工作或没有。。。您可以使用“HttpRequester”mozilla firefox插件。对于此插件:


  • PS:我测试了它,它在IIS服务器上对我有效。Visual studio已在temproray IIS服务器上创建了。这非常简单。只需创建一个自定义模块:

    public class HeaderStripModule : IHttpModule
    {
        public void Init(HttpApplication application)
        {
            application.PreSendRequestHeaders += (sender, args) => HttpContext.Current.Response.Headers.Remove("Server");
        }
    
        public void Dispose(){}
    }
    
    然后在
    web.config
    applicationHost.config
    中注册,如果您希望在计算机范围内实现

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

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

    但是URLScan的“删除服务器头”选项在“请求过滤”中看起来没有任何等效项

    如和上所述,您可以使用URLEWRITE清空
    服务器
    ,URLEWRITE在IIS 8/8.5上仍然可用(需要进行一些更新才能在IIS管理控制台中使用其UI)

    现在看来,如果没有官方支持的话,URLScan仍然可以安装在IIS8/8.5上

    我没有测试过自己。以下是步骤:

    • 安装IIS 6元数据库兼容性(如果尚未安装)
    • 安装Isapi过滤器(如果尚未安装)
    • 安装URLScan(从可下载的安装程序,而不是从web平台安装程序)
    • 通过其
      ini
      文件配置URLScan(默认情况下在
      C:\Windows\System32\inetsrv\URLScan
      中)

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

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

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

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

    对于上述问题,请在Global.asax.cs中添加以下代码

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

    在浏览了这么多之后,问题得到了解决。

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

    
    
    可以找到有关如何删除所有不需要/不必要的标题的更多详细信息

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


    IIS10中存在一个漏洞,使得它有时甚至在配置时也会显示标题。现在应该已修复,但IIS/Windows必须更新。

    问题是,URL重写需要服务器资源(例如CPU)。因此,如果您有一个执行大量请求的系统,例如Microsoft Exchange(EAS)服务器,那么URL重写可能会给您的用户造成严重的延迟…现在有一个更好的方法(至少在IIS 10+):如何在IIS 8中关闭服务器签名…@AbijithAjayan“URL重写”模块的功能太多了。我强烈建议使用它。它只适用于POST和GET请求..服务器标题仍然显示PUT和TRACE方法的IIS版本不适用于静态内容,除非设置了runAllModulesForAllRequests,这在性能方面不是一件好事。这篇博文为众多的标题类型提供了补救措施,但它也建议对
    服务器
    标题进行url扫描,这不再像以前那样有用了:我们已经回答了@Frederic,对IIS 7.0是,但此处的此线程适用于IIS 8.0/8.5,此处不支持URLScan。链接指向URLRewite解决方案,而不是URLScan。UrlRewrite在IIS 8下运行良好(甚至更好,因为更新已经在IIS控制台中恢复了它的UI;以前我们只能直接通过web.config进行设置)
    
    protected void Application_PreSendRequestHeaders() 
       {
           Response.Headers.Remove("Server");
           Response.AddHeader("Sample1", "Value1");
       }
    
    protected void Application_PreSendRequestHeaders() 
       {
           Response.Headers.Remove("Server");
           Response.AddHeader("Sample1", "Value1");
       }