87

我需要删除过多的标题(主要是为了通过渗透测试)。我花时间研究了涉及运行 UrlScan 的解决方案,但这些解决方案很麻烦,因为每次启动 Azure 实例时都需要安装 UrlScan

Azure 必须有一个很好的解决方案,它不涉及从 startup.cmd 部署安装程序。

我了解响应标头添加在不同的位置

  • 服务器:由 IIS 添加。
  • X-AspNet-Version:由 System.Web.dll 在 HttpResponse 类中 Flush 时添加
  • X-AspNetMvc-Version:由 MvcHandler 在 System.Web.dll 中添加。
  • X-Powered-By : 由 IIS 添加

有什么方法可以配置(通过 web.config 等?) IIS7 来删除/隐藏/禁用 HTTP 响应标头以避免asafaweb.com上的“过多标头”警告,而无需创建 IIS 模块或部署需要的安装程序每次 Azure 实例启动时运行?

4

5 回答 5

139

以下更改允许您在 Azure 中删除这些 HTTP 响应标头,而无需编写自定义 HttpModule。

网上的大部分信息都已过时,并且涉及 UrlScan(它已被集成到 IIS7 中,但已RemoveServerHeader=1删除该选项)。下面是我找到的最简洁的解决方案(感谢这个博客这个答案这个博客的结合)。

要删除Server,请转到 Global.asax,找到/创建Application_PreSendRequestHeaders事件并添加以下内容(感谢BK此博客,这在 Cassini / local dev 上也不会失败):

2014 年 4 月编辑:您可以将 PreSendRequestHeaders 和 PreSendRequestContext 事件与本机 IIS 模块一起使用,但不要将它们与实现 IHttpModule 的托管模块一起使用。设置这些属性可能会导致异步请求出现问题。正确的版本是使用 BeginRequest 事件。

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var application = sender as HttpApplication;
        if (application != null && application.Context != null)
        {
            application.Context.Response.Headers.Remove("Server");
        }
    }

要删除X-AspNet-Version,请在 web.config 中查找/创建<system.web>并添加:

  <system.web>
    <httpRuntime enableVersionHeader="false" />

    ...

要删除X-AspNetMvc-Version,请转到 Global.asax,找到/创建Application_Start事件并添加如下一行:

  protected void Application_Start()
  {
      MvcHandler.DisableMvcResponseHeader = true;
  }

要删除X-Powered-By,请在 web.config 中查找/创建<system.webServer>并添加:

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

    ...
于 2012-10-09T16:01:42.830 回答
12

MSDN 发布了这篇关于如何在 Azure 网站上隐藏标题的文章。您现在可以通过向 system.webServer 添加条目来隐藏 web.config 中的服务器

<security>
      <requestFiltering removeServerHeader ="true" />
</security>

VS 会皱眉认为上述无效。上面的链接有代码作为图片,很难找到。MVC 版本仍然像上面一样隐藏在应用程序启动中,对于 x-powered-by 和 .Net 版本也是如此。

于 2014-01-11T16:39:25.993 回答
6

NuGet 上还有一个包可帮助您通过几行配置实现此目标,并且无需更改代码:NWebsec。可以在此处找到有关删除版本标头的文档:https ://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

它在这里演示:http ://www.nwebsec.com/HttpHeaders/VersionHeaders (在 Azure 中)

免责声明:我是该项目的开发人员。

于 2012-10-09T19:29:14.517 回答
6

尼克埃文斯的回答是完美的,但是......

如果出于安全目的删除这些标题,请不要忘记更改ASP.NET Session coockie name!因为当你看到这个时更容易猜出使用的语言或服务器版本:

在此处输入图像描述

更改 cookie 名称:(有创意)

<system.web>
  <sessionState cookieName="PHPSESSID" />
</system.web>
于 2017-07-11T22:06:14.437 回答
4

汇总来自 @giveme5minutes 和 @AKhooli 的先前答案,因为它们与 Azure 网站以及扫描仪想要查看的其他一些项目有关,这些是我为使 ASafaWeb 对 Azure 站点感到满意所做的更改。

它仍然抱怨 Azure 关联标头 cookie 不只是 https,但关联是您想要重放的 cookie 类型,对吧?

<system.web>
    <compilation debug="false">
    <httpRuntime enableVersionHeader="false" />
    <httpCookies httpOnlyCookies="true" requireSSL="true" />    
    <customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx" />
</system.web>

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="DENY" />
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
    <security>
      <!--removes Azure headers-->
      <requestFiltering removeServerHeader="true" />
    </security>
</system.webServer>
于 2016-01-24T04:07:54.370 回答