【问题标题】:Best way to remove HTTP response headers in ASP.NET that reveal technology stack在 ASP.NET 中删除显示技术堆栈的 HTTP 响应标头的最佳方法
【发布时间】:2019-12-04 05:44:39
【问题描述】:

我需要从我的 ASP.NET MVC 3 Web 应用程序中删除以下标头。

Server
X-AspNet-Version
X-AspNetMvc-Version
X-AspNetWebPages-Version
X-Powered-By

我找到了两个可行的选项。选项 1 更干净,实际上删除了服务器标头,但我试图找出是否有任何我应该担心的副作用。 哪一个选项比另一个更好?每种方法的优缺点是什么?

选项 1

Global.asax.cs >> Application_Start()

PreSendRequestHeaders += Application_PreSendRequestHeaders;

Global.asax.cs

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    HttpContext.Current.Response.Headers.Remove("Server");
    HttpContext.Current.Response.Headers.Remove("X-AspNetWebPages-Version");
    HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
    HttpContext.Current.Response.Headers.Remove("X-Powered-By");
    HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
}

选项 2

Web.config >> 在<system.web> 节点内(删除 X-AspNet-Version)

<httpRuntime enableVersionHeader="false" />

Web.config >> 在&lt;system.webServer&gt; 节点内(移除 X-Powered-By)

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

Web.config >> 在&lt;system.webServer&gt; 节点内(更改服务器的值,需要 URLRewrite)

<rewrite>
  <outboundRules rewriteBeforeCache="true">
    <rule name="Remove Server header">
      <match serverVariable="RESPONSE_Server" pattern=".+" />
      <action type="Rewrite" value="" />
    </rule>
  </outboundRules>
</rewrite>

Global.asax.cs >> Application_Start()(删除 X-AspNetMvc-Version 和 X-AspNetWebPages-Version)

MvcHandler.DisableMvcResponseHeader = true;
WebPageHttpHandler.DisableWebPagesResponseHeader = true;

【问题讨论】:

  • 如果 IIS 版本是 10,我找到了一种更好的方法来删除服务器标头。在 web.config 中,在 节点中添加一个 节点。在此节点中添加 。这将完全删除标题而不是重写值。请注意,VS17 会错误地在 removeServerHeader 上抛出警告。
  • 还有一个注意事项。 RemoveServerHeader 在 Windows Server 2016 build 1607 上的 IIS 10 中对我不起作用。它在 Windows Server 2019 build 1809 中有效。

标签: asp.net asp.net-mvc asp.net-mvc-3 http-headers iis-10


【解决方案1】:

在我看来,第二个版本很好。

根据你的描述和代码,我做了一个测试demo,将项目发布到IIS10后,发现响应头没有去掉,你可以发现x-Powered-by还在。

此外,根据HttpApplication.PreSendRequestHeaders Event API,您可以找到以下备注:

不要将 PreSendRequestHeaders 与实现 IHttpModule 的托管模块一起使用。设置这些属性可能会导致异步请求出现问题。应用程序请求路由 (ARR) 和 websocket 的组合可能会导致访问冲突异常,从而导致 w3wp 崩溃。例如,iiscore.dll 中的 iiscore!W3_CONTEXT_BASE::GetIsLastNotification+68 导致了访问冲突异常(0xC0000005)。

【讨论】:

  • 我还在看 X-Powered-By。偷偷摸摸。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-04-26
  • 2020-07-02
  • 2010-10-15
  • 2016-01-02
  • 2013-12-09
  • 2017-01-18
  • 2011-12-15
  • 2011-02-13
相关资源
最近更新 更多