asp.net - Quitar/ocultar/deshabilitar encabezados de respuesta HTTP excesivos en Azure/IIS7 sin UrlScan
iis-7 penetration-testing (5)
Necesito eliminar los encabezados excesivos (principalmente para pasar las pruebas de penetración). He dedicado tiempo a buscar soluciones que implican ejecutar UrlScan, pero son engorrosas ya que UrlScan debe instalarse cada vez que se inicia una instancia de Azure .
Debe haber una buena solución para Azure que no implique la implementación de instaladores desde startup.cmd.
Entiendo que los encabezados de respuesta se agregan en diferentes lugares :
- Servidor : agregado por IIS.
- Versión de X-AspNet : agregada por System.Web.dll en el momento de la descarga en la clase HttpResponse
- X-AspNetMvc-Version : Agregado por MvcHandler en System.Web.dll.
- X-Powered-By : agregado por IIS
¿Hay alguna forma de configurar (a través de web.config, etc.?) IIS7 para eliminar / ocultar / deshabilitar los encabezados de respuesta HTTP para evitar la advertencia de "Excessive Headers" en asafaweb.com , sin crear un módulo IIS o implementar instaladores que necesiten se ejecutará cada vez que se inicie una instancia de Azure?
La respuesta de Nick Evans es perfecta, pero ...
Si elimina estos encabezados por ASP.NET Session coockie name
seguridad , ¡no olvide cambiar el ASP.NET Session coockie name
! Porque es más fácil adivinar el idioma utilizado o la versión del servidor cuando ve esto:
Para cambiar el nombre de la cookie: (sea creativo)
<system.web>
<sessionState cookieName="PHPSESSID" />
</system.web>
Al repasar las respuestas anteriores de @ giveme5minutes y @AKhooli, ya que se relacionan con los sitios web de Azure más algunos otros elementos que el escáner quiere ver, estos son los cambios que hice para que ASafaWeb esté contento con un sitio de Azure.
Todavía se queja de que la cookie de cabecera de Afinidad de Azure no es solo https, pero la afinidad es el tipo de cookie que desea reproducir de todos modos, ¿no?
<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>
Los siguientes cambios le permiten eliminar estos encabezados de respuesta HTTP en Azure sin escribir un HttpModule personalizado.
La mayoría de la información en la red está desactualizada e involucra a UrlScan (que desde entonces se ha integrado en IIS7, pero con la opción RemoveServerHeader=1
eliminada). A continuación se muestra la mejor solución que he encontrado (gracias a este blog , esta respuesta y este blog combinados).
Para eliminar Servidor , vaya a Global.asax, busque / cree el evento Application_PreSendRequestHeaders
y agregue lo siguiente (gracias a BK y a este blog, esto tampoco fallará en Cassini / local dev):
Editado en abril de 2014: puede usar los eventos PreSendRequestHeaders y PreSendRequestContext con módulos IIS nativos, pero no los use con módulos administrados que implementen IHttpModule. Establecer estas propiedades puede causar problemas con las solicitudes asincrónicas . La versión correcta es usar el evento 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");
}
}
Para eliminar X-AspNet-Version , en el archivo web.config, busque / cree <system.web>
y agregue:
<system.web>
<httpRuntime enableVersionHeader="false" />
...
Para eliminar X-AspNetMvc-Version , vaya a Global.asax, busque / cree el evento Application_Start
y agregue una línea de la siguiente manera:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Para eliminar X-Powered-By , en el archivo web.config busque / cree <system.webServer>
y agregue:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
...
MSDN publicó este artículo sobre cómo ocultar encabezados en los sitios web de Azure. Ahora puede ocultar el servidor de web.config agregando una entrada a system.webServer
<security>
<requestFiltering removeServerHeader ="true" />
</security>
Sin embargo, VS fruncir el ceño ante lo anterior como inválido. El enlace de arriba tiene código como fotos, difícil de encontrar. La versión MVC todavía está oculta en el inicio de la aplicación como se indica arriba, lo mismo para x-powered-by y .Net versión.
También hay un paquete en NuGet que te ayuda a lograr esto a través de unas pocas líneas de configuración y sin cambios en el código: NWebsec. Los documentos sobre la eliminación de encabezados de versión se pueden encontrar aquí: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers
Está demoed aquí: http://www.nwebsec.com/HttpHeaders/VersionHeaders (en Azure)
Descargo de responsabilidad: soy el desarrollador en el proyecto.