如何删除ASP.Net MVC默认HTTP头?
我正在处理的MVC应用程序中的每个页面都将这些HTTP标头设置为响应:
X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 X-AspNetMvc-Version: 2.0
我如何防止这些显示?
“powered by”是IIS中的自定义标头。 更改它取决于您使用的IIS版本。 有关如何修改或删除的一些信息,请参阅此处:
http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
要删除MVC头,
在Global.asax中的Application Start事件中:
MvcHandler.DisableMvcResponseHeader = true;
把这个放在web.config中去掉X-AspNet-Version头文件:
<system.web> <httpRuntime enableVersionHeader="false" /> </system.web>
你也可以通过向你的global.asax文件添加代码来删除它们:
protected void Application_PreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("X-Powered-By"); HttpContext.Current.Response.Headers.Remove("X-AspNet-Version"); HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version"); HttpContext.Current.Response.Headers.Remove("Server"); }
我在我的web.config
find了这个configuration,它是在Visual Studio中创build的New Web Site...
(而不是New Project...
)。 由于这个问题陈述了一个ASP.NET MVC应用程序,而不是相关的,但仍然是一个选项。
<system.webServer> <httpProtocol> <customHeaders> <clear /> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
更新 :另外,特洛伊亨特有一篇文章标题为嘘…不要让你的响应标题说话过于详细的步骤删除这些头以及他的ASafaWeb工具扫描他们和其他安全configuration的链接。
如在IIS 7上隐藏ASP.NET MVC Web应用程序中所述 ,可以通过将以下configuration节应用于web.config来closuresX-AspNet-Version标头:
<system.web> <httpRuntime enableVersionHeader="false"/> </system.web>
并通过更改您的Global.asax.cs删除X-AspNetMvc-Version标头,如下所示:
protected void Application_Start() { MvcHandler.DisableMvcResponseHeader = true; }
如自定义标题中所述您可以通过将以下configuration部分应用于web.config来移除“X-Powered-By”标题:
<system.webServer> <httpProtocol> <customHeaders> <clear /> </customHeaders> </httpProtocol> </system.webServer>
有没有简单的方法来通过configuration删除“服务器”响应头,但您可以实现一个HttpModule
删除特定的HTTP头,如隐藏在IIS 7上的ASP.NET MVC Web应用程序和如何删除服务器-x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-the-response-header-in-iis7 。
.NET核心
要在Program.cs文件中删除Server头,请在调用.UseKestrel时添加以下选项:
.UseKestrel(opt => opt.AddServerHeader = false)
要删除X-Powered-By标题,如果部署到IIS,请编辑web.config并在system.webServer标记内添加以下部分:
<httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol>
.NET 4.5.2
要删除您的global.asax文件中的服务器标题,请添加以下内容:
protected void Application_BeginRequest(object sender, EventArgs e) { string[] headers = { "Server", "X-AspNet-Version" }; if (!Response.HeadersWritten) { Response.AddOnSendingHeaders((c) => { if (c != null && c.Response != null && c.Response.Headers != null) { foreach (string header in headers) { if (c.Response.Headers[header] != null) { c.Response.Headers.Remove(header); } } } }); } }
Pre .NET 4.5.2
将下面的c#类添加到您的项目中:
public class RemoveServerHeaderModule : IHttpModule { public void Init(HttpApplication context) { context.PreSendRequestHeaders += OnPreSendRequestHeaders; } public void Dispose() { } void OnPreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("Server"); } }
然后在你的web.config中添加下面的<modules>部分:
<system.webServer> .... <modules> <add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" /> </modules>
不过,我有一个问题,子项目找不到这个模块。 不好玩。
删除X-AspNetMvc-Version标题
要删除“X-AspNetMvc-Version”标签,对于任何版本的.NET,修改您的“web.config”文件以包含:
<system.web> ... <httpRuntime enableVersionHeader="false" /> ... </system.web>
感谢微软让这难以置信的令人难以置信。 或者,也许这是你的意图,以便你可以跟踪世界各地的IIS和MVC安装…
在Asp.Net Core中,你可以像这样编辑web.config文件:
<httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol>
您可以删除Kestrel选项中的服务器标题:
.UseKestrel(c => { // removes the server header c.AddServerHeader = false; })
如在“ 删除Windows Azure网站上的标准服务器标题”页面上所示,可以使用以下命令删除标题:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <httpProtocol> <customHeaders> <clear /> </customHeaders> </httpProtocol> <security> <requestFiltering removeServerHeader="true"/> </security> </system.webServer> <system.web> <httpRuntime enableVersionHeader="false" /> </system.web> </configuration>
这将删除服务器标题和X标头。
这在Visual Studio 2015的testing中本地工作。
你可以改变任何头文件或Application_EndRequest()
任何东西,试试这个
protected void Application_EndRequest() { // removing excessive headers. They don't need to see this. Response.Headers.Remove("header_name"); }
为了完整起见,还有另一种方法使用registry删除Server
标题。
看到这个MSDN博客 。
在以下registry项中创build一个名为DisableServerHeader的DWORD条目,并将该值设置为1。
HKLM \系统\ CurrentControlSet \服务\ HTTP \参数
我宁愿使用Web.configfind一个合适的解决scheme,但是使用<rewrite>
并不好,因为它需要安装rewrite模块,即使这样也不会真正删除头文件,只是将其清空。
X-Powered-By头由IIS添加到HTTP响应中,所以即使在服务器级别,也可以通过IISpipe理器将其移除:
您可以直接使用web.config:
<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>