【问题标题】:Header servers are not removed in asp.net mvc在 asp.net mvc 中未删除标头服务器
【发布时间】:2018-04-04 00:14:54
【问题描述】:

我在 https url 上有一个 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 中实现 URL 重写规则?
  • 这看起来很像这个问题stackoverflow.com/questions/46733045/…
  • @alaa_sayegh 是的,但是 js 文件的标题仍然存在。
  • @HamidReza 查看我发布的答案

标签: c# asp.net asp.net-mvc asp.net-mvc-4 iis


【解决方案1】:

如果您希望从 整个 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 版本。

【讨论】:

  • 谢谢。现在已经从一些文件中删除了标头,而其他一些文件(例如 js 文件)还有标头。
【解决方案2】:

“Ori a”的建议答案是我使用并且仍然经常使用的答案,它适用于托管代码。但是,JS 文件是静态内容,默认情况下直接提供而不是通过托管代码提供。 托管代码模块仅适用于通过 ASP.NET 管道传递的代码。因此,您应该通过将其添加到 system.webServer 部分的 webconfig 中来强制所有请求通过您的托管代码:

<modules runAllManagedModulesForAllRequests="true">

像这样:

<system.webServer>     
  <modules runAllManagedModulesForAllRequests="true">     
   </modules>     
</system.webServer>

使用此语句,您甚至可以强制静态内容遵守您的标题规则。希望对您有所帮助!

【讨论】:

  • 谢谢,但服务器标头仍保留在 js 和图像文件中。
  • 你能给我看个样本吗?你有链接吗?或粘贴屏幕截图
  • 哪个js?当我选择 js 文件时,我没有看到任何标头服务器值。我使用谷歌浏览器,在网络选项卡下。修复 runAllManagedModulesForAllRequests 后,您可能需要清除缓存
  • 除非绝对必要,否则您真的应该避免使用runAllManagedModulesForAllRequests
猜你喜欢
  • 2019-09-29
  • 2021-06-29
  • 1970-01-01
  • 2019-02-26
  • 2017-07-11
  • 2016-05-23
  • 2010-11-13
  • 1970-01-01
  • 2016-05-09
相关资源
最近更新 更多