【问题标题】:How to delete IIS custom headers like X-Powered-By: ASP.NET from response?如何从响应中删除 IIS 自定义标头,例如 X-Powered-By: ASP.NET?
【发布时间】:2011-05-03 23:41:03
【问题描述】:

IIS 7.0 integrated mode 中删除所有带有Response.ClearHeaders() 的标头后,IIS 会添加一些其他标头,例如ServerX-Powered-By,这些标头向黑客揭示了有用的信息。我怎样才能停止这种行为(考虑我仍然需要添加我的自定义标题)?

【问题讨论】:

标签: asp.net iis http-headers


【解决方案1】:

X-Powered-By 在 IIS 中配置。在 Windows 7 上,它具体是:

  1. IIS 管理器
  2. 计算机名称 > 站点 > 默认网站
  3. HTTP 响应标头
  4. 删除X-Powered-By

我不确定是什么生成了 Server 标头。

【讨论】:

  • 谢谢。至少有 50% 的进展。如果可能的话,我更喜欢使用 asp.net 内部的通用方法。
  • @Xaqron,您可能可以通过编程方式进行设置,但我不知道如何随意。对不起。
【解决方案2】:

URLScan 可用于移除服务器头,或配置另一个服务器头,http://learn.iis.net/page.aspx/938/urlscan-3-reference/

但它永远不会真正阻止黑客知道你实际上使用了什么。显然还有其他方法可以检测您的服务器信息。

【讨论】:

  • 谢谢。应该有一些内置的东西,比如配置部分,或者在最坏的情况下进行注册表操作,而不是安装一个主要目的不是删除 SERVER 标头的组件。
  • 我已经说过不是每个人都认为显示服务器标头不好。那么,如果很少有人使用它,为什么还要内置呢?
【解决方案3】:

您可以将其添加到您的 Web.Config:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <remove name="X-Powered-By" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

更新:如果您使用的是 MVC 框架,我还建议您删除 X-AspNetMvc-VersionX-AspNet-Version 标头。这是通过分别在您的Global.asax 文件中设置MvcHandler.DisableMvcResponseHeader = true 和在您的Web.config 中设置&lt;system.web&gt;&lt;httpRuntime enableVersionHeader="false" /&gt;&lt;/system.web&gt; 来完成的。

【讨论】:

  • 在 IIS 10.0(和 Azure Web Apps)中,您还可以使用 &lt;system.webServer&gt;&lt;security&gt;&lt;requestFiltering removeServerHeader ="true"&gt;&lt;/requestFiltering&gt;&lt;/security&gt;&lt;/system.webServer&gt; 删除 Server 标头。
  • 面临类似问题。在 webconfig 文件中添加了自定义标头。本地应用程序运行良好,但在部署到 IIS 服务器 8.5(AWS) 时抛出 500 Internal Server 错误。stackoverflow.com/questions/52947861/…
【解决方案4】:

对于 IIS7+ 集成模式,eth0 有:&lt;customHeaders&gt; web.config 中的标签。感谢那。至于“Server”头,如果使用MVC,你可以简单地添加:

    protected void Application_PreSendRequestHeaders()
    {
        Response.Headers.Remove("Server");
    }

到 Global.asax 中的 MvcApplication 类。否则,您可以简单地添加一个自定义 Http 模块,处理 PreSendRequestHeaders 事件,然后做同样的事情。

【讨论】:

【解决方案5】:

以下答案包括一个不需要 URLScan 或自定义 HttpModule 的完整解决方案,并删除了您提到的所有相关标头。它也适用于 Azure。

Removing/Hiding/Disabling excessive HTTP response headers in Azure/IIS7 without UrlScan

【讨论】:

    【解决方案6】:

    您可以使用 appcmd.exe(IIS 7 及更高版本)来完成您的工作。脚本会是这样的:

    C:\Windows\System32\inetsrv\appcmd.exe set config -section:system.webserver/httpProtocol /-customHeaders.["name='X-Powered-By'"] /commit:apphost  
    

    /commit:apphost:这会将配置设置提交到 ApplicationHost.config 文件中的相应位置部分。

    我通常会创建一个包含所有这些脚本的批处理文件,这些脚本会在安装应用程序后在 Web 服务器上运行。

    对于 ASP.NET MVC 应用程序,方法不同,您可以参考此处给出的其他答案。

    【讨论】:

      【解决方案7】:

      想在这里补充一点,对于不再有 web.config 文件的 ASP.NET Core 版本,需要采用不同的方法。

      我做了以下调整来删除 ASP.NET Core 2.1 中的标头:

      您可以通过替换来删除 x-powered-by 标头

      <customHeaders>
              <clear />
              <add name="X-Powered-By" value="ASP.NET" />
      </customHeaders>
      

      <customHeaders>
              <remove name="X-Powered-By" />
      </customHeaders>
      

      在项目的 .vs\config 文件夹中的 applicationhost.config 文件中。

      可以通过添加去掉服务器头

      .UseKestrel(c => c.AddServerHeader = false)
      

      在 Program.cs 文件中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-29
        • 2018-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        相关资源
        最近更新 更多