Pregunta Quitar / ocultar / deshabilitar encabezados de respuesta HTTP excesivos en Azure / IIS7 sin UrlScan


Necesito eliminar encabezados excesivos (principalmente para pasar las pruebas de penetración). He dedicado tiempo a buscar soluciones que implican ejecutar UrlScan, pero estas son engorrosas 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 X-AspNet: agregado por System.Web.dll en el momento de Flush en la clase HttpResponse
  • Versión X-AspNetMvc: 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 "Encabezados excesivos" en asafaweb.com, sin crear un módulo IIS o implementar instaladores que deben ejecutarse cada vez que se inicia una instancia de Azure?


76
2017-10-09 16:01


origen


Respuestas:


Los siguientes cambios le permiten eliminar estos encabezados de respuesta HTTP en Azure sin escribiendo 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 a IIS7, pero con el RemoveServerHeader=1 opción eliminada). A continuación se muestra la mejor solución que he encontrado (gracias a este blog, esta respuestay este blog conjunto).

Para eliminar Servidor, vaya a Global.asax, encuentre / cree el Application_PreSendRequestHeaders evento y agregue lo siguiente (gracias a BK y este blog esto tampoco fallará en Cassini / dev local):

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 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 Versión X-AspNet, en la web.config buscar / crear <system.web> y añadir:

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

    ...

Para eliminar Versión X-AspNetMvc, vaya a Global.asax, encuentre / cree el Application_Start evento y agregue una línea de la siguiente manera:

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

Para eliminar X-Powered-By, en la web.config buscar / crear <system.webServer> y añadir:

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

    ...

132
2017-10-09 16:01



MSDN publicó Este artículo sobre cómo ocultar los 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.


10
2018-01-11 16:39



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.


6
2017-10-09 19:29



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>

3
2018-01-24 04:07



La respuesta de Nick Evans es perfecta, pero ...

Si elimina estos encabezados por un seguridad propósito, no te olvides de cambiar ASP.NET Session coockie name ! Porque es más fácil adivinar el idioma utilizado o la versión del servidor cuando ve esto:

enter image description here

Para cambiar el nombre de la cookie: (ser creativo)

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

2
2017-07-11 22:06