Header 服务器未在 asp.net mvc 中删除
Header servers are not removed in asp.net mvc
我在 https url 上有一个 asp.net mvc 项目。
我已经从 IIS 中删除了 X-Power-By header。
我的 web.config 中有这些行:
<customHeaders>
<remove name="X-AspNet-Version" />
<remove name="X-AspNetMvc-Version" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
我写了以下class:
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("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 中为上面的 class 添加了这一行:
<modules>
<add name="RemoveServerHeaderModule" type="IZBSC.UI.Components.RemoveServerHeaderModule" />
</modules>
我什至在我的 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");
}
并且我在 Global.asax 中的 Application_Start() 方法中添加了以下代码行:
MvcHandler.DisableMvcResponseHeader = true;
现在服务器 header 已从我的页面中删除...
但是……
显示服务器 header 和 X-Power-By header 一些 css 和 jquery 以及图片文件。
我真的应该怎么做才能从我的所有请求(包括页面、样式、脚本和图像文件)中删除服务器和 X-Power-By header?
如果您希望从 整个 IIS 服务器 中删除服务器响应 Headers(从安全角度来看这更好),您可以从注册表中配置它:
https://blogs.msdn.microsoft.com/varunm/2013/04/23/remove-unwanted-http-response-headers/
删除此 headers:
- 服务器 - 指定网络服务器版本。
- X-Powered-By - 表示该网站是 "powered by ASP.NET."
- X-AspNet-Version - 指定使用的 ASP.NET 版本。
来自 "Ori a" 的建议答案是我使用并且仍然经常使用的答案,它适用于托管代码。但是,JS 文件是静态内容,默认情况下直接提供,而不是通过托管代码。
托管代码模块仅适用于通过 ASP.NET 管道的代码。因此,您应该通过将此添加到 system.webServer 部分中的 webconfig 来强制所有请求通过您的托管代码:
<modules runAllManagedModulesForAllRequests="true">
像这样:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
使用此语句,您甚至可以强制静态内容遵守您的 header 规则。希望对您有所帮助!
我在 https url 上有一个 asp.net mvc 项目。
我已经从 IIS 中删除了 X-Power-By header。
我的 web.config 中有这些行:
<customHeaders>
<remove name="X-AspNet-Version" />
<remove name="X-AspNetMvc-Version" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
我写了以下class:
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("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 中为上面的 class 添加了这一行:
<modules>
<add name="RemoveServerHeaderModule" type="IZBSC.UI.Components.RemoveServerHeaderModule" />
</modules>
我什至在我的 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");
}
并且我在 Global.asax 中的 Application_Start() 方法中添加了以下代码行:
MvcHandler.DisableMvcResponseHeader = true;
现在服务器 header 已从我的页面中删除...
但是……
显示服务器 header 和 X-Power-By header 一些 css 和 jquery 以及图片文件。
我真的应该怎么做才能从我的所有请求(包括页面、样式、脚本和图像文件)中删除服务器和 X-Power-By header?
如果您希望从 整个 IIS 服务器 中删除服务器响应 Headers(从安全角度来看这更好),您可以从注册表中配置它:
https://blogs.msdn.microsoft.com/varunm/2013/04/23/remove-unwanted-http-response-headers/
删除此 headers:
- 服务器 - 指定网络服务器版本。
- X-Powered-By - 表示该网站是 "powered by ASP.NET."
- X-AspNet-Version - 指定使用的 ASP.NET 版本。
来自 "Ori a" 的建议答案是我使用并且仍然经常使用的答案,它适用于托管代码。但是,JS 文件是静态内容,默认情况下直接提供,而不是通过托管代码。 托管代码模块仅适用于通过 ASP.NET 管道的代码。因此,您应该通过将此添加到 system.webServer 部分中的 webconfig 来强制所有请求通过您的托管代码:
<modules runAllManagedModulesForAllRequests="true">
像这样:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
使用此语句,您甚至可以强制静态内容遵守您的 header 规则。希望对您有所帮助!