在Azure / IIS7中删除/隐藏/禁用过多的HTTP响应头,无需UrlScan

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

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

我明白,响应标题被添加在不同的地方 :

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

有没有什么办法来configuration(通过web.config等?)IIS7删除/隐藏/禁用HTTP响应标头,以避免在asafaweb.com的“过度的头”警告,而不创build一个IIS模块或部署安装程序需要每次Azure实例启动时都要运行?

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

networking上的大部分信息已经过时,并且涉及UrlScan(已经被集成到IIS7中,但删除了RemoveServerHeader=1选项)。 下面是我find的最新的解决scheme(感谢这个博客 , 这个答案 , 这个博客合并)。

要删除服务器 ,请转到Global.asax,find/创buildApplication_PreSendRequestHeaders事件并添加以下内容(感谢BK , 此博客也将在Cassini / local dev上失败):

2014年4月编辑:您可以将PreSendRequestHeaders和PreSendRequestContext事件与本机IIS模块一起使用,但不要将它们与实施IHttpModule的托pipe模块一起使用。 设置这些属性可能会导致asynchronous请求的问题。 正确的版本是使用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中find/ create <system.web>并添加:

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

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

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

要删除X-Powered-By ,请在web.config中find/ create <system.webServer>并添加:

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

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

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

VS将在上面作为无效皱眉。 上面的链接有代码作为图片,很难find。 如上所述,MVC版本仍然隐藏在应用程序启动中,与x-powered-by和.Net版本相同。

NuGet上还有一个包,可以通过几行configuration帮助你实现这一点,而不需要修改代码:NWebsec。 关于删除版本标题的文档可以在这里find: https : //github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

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

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

从@ giveme5minutes和@AKhooli滚动以前的答案,因为它们涉及到Azure网站以及扫描仪希望看到的其他一些项目,这些是我为使AsafaWeb对Azure站点感到满意所做的更改。

它仍然抱怨Azure亲和性头cookie不仅仅是https,但亲和力是你想要重播的cookie的types,对不对?

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

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

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

在这里输入图像描述

要更改cookie名称:(是创意)

 <system.web> <sessionState cookieName="PHPSESSID" /> </system.web> 
Interesting Posts