繁体   English   中英

在ASP.NET MVC中没有删除头服务器

[英]Header servers are not removed in asp.net mvc

我在https网址上有一个asp.net mvc项目。

我已经从IIS中删除了X-Power-By标头。

我的web.config中有以下几行:

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

我写了以下课程:

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中添加了这一行:

<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;

现在,服务器标头已从我的页面中删除...

可是

对于某些css,jquery和图片文件,显示了Server标头和X-Power-By标头。

我真的应该怎么做才能从所有请求中删除Server和X-Power-By标头,包括页面,样式,脚本和图像文件?

如果您希望从整个IIS服务器中删除服务器响应标头(从安全性的角度考虑最好),则可以从注册表中配置它:

https://blogs.msdn.microsoft.com/varunm/2013/04/23/remove-unwanted-http-response-headers/

删除以下标题:

  • 服务器-指定Web服务器版本。
  • X-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>

使用此语句,您甚至要强制静态内容也遵守标头规则。 希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM