48 votos

Cómo eliminar las cabeceras de respuesta de IIS/ASP.NET

Tengo un par de servidores IIS/6.0 a los que la seguridad me pide que elimine un par de cabeceras de respuesta que se envían a los navegadores de los clientes en las solicitudes. Están preocupados por la divulgación de información de la plataforma a través de las cabeceras de respuesta. He eliminado todas las cabeceras HTTP de la configuración de IIS para el sitio web (X-Powered-By o alguna cabecera similar).

(Personalmente sé que esta información se puede averiguar fácilmente, aunque esté oculta, pero no es mi decisión).

Cabeceras que quiero eliminar:

  • Servidor - Microsoft-IIS/6.0
  • X-AspNet-Version - 2.0.50727

También sé que ASP.NET MVC también emite su propia cabecera, si sabes cómo eliminarla también, sería de gran ayuda.

  • X-AspNetMvc-Version - 1.0

60voto

Para eliminar todas las cabeceras personalizadas que revelan demasiada información - los métodos son variados (por desgracia) para IIS 7:

Nombre de la cabecera: X-Powered-By

Añade:

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

en el <system.webServer> sección.

Nombre de la cabecera: Servidor

Implemente un módulo http que elimine esta cabecera llamando a Response.Headers.Remove("Server") desde el evento PreSendRequestHeaders. Otro recurso para esto: Cómo ocultar su aplicación web ASP.NET MVC en IIS 7

Nombre de la cabecera: X-AspNet-Version

En la sección httpRuntime del web.config - establecer:

<httpRuntime enableVersionHeader="false" />

Nombre de la cabecera: X-AspNetMvc-Version

Desde el evento Application_Start en global.asax - ejecute el siguiente código (C#):

MvcHandler.DisableMvcResponseHeader = true;

1 votos

Sólo quiero precisar algo : la mayoría de estos trucos sólo funcionarán con IIS >=7 en modo Pipeline integrado. En Modo Clásico en el mejor de los casos no hará nada (líneas <remove> en web.config) o lanzará una excepción (llamadas directas a Response.Headers en global.asax, que es otra solución para eliminar las cabeceras). Estoy trabajando en una web pegada al Modo Clásico y desgraciadamente no he podido eliminar estas cabeceras.

0 votos

¿Hay alguna forma de ocultar la versión de Asp.Net MVC en la propia configuración? Sé que puedo conseguirlo en el archivo global.asax.cs, pero ¿qué pasa si quiero hacerlo en el propio servidor IIS?

32voto

Justin Scott Puntos 7630

Su departamento de seguridad quiere que haga esto para que el tipo de servidor sea más difícil de identificar. Esto puede disminuir el aluvión de herramientas de hacking automatizadas y dificultar la entrada al servidor.

Dentro de IIS, abra las propiedades del sitio web, luego vaya a la pestaña de encabezados HTTP. La mayoría de las cabeceras X se pueden encontrar y eliminar aquí. Esto se puede hacer para sitios individuales, o para todo el servidor (modificar las propiedades del objeto Sitios Web en el árbol).

Para la cabecera del servidor, en IIS6 puede utilizar el programa de Microsoft URLScan herramienta a distancia que. Port 80 Software también hace un producto llamado ServerMask que se encargará de eso, y de mucho más, por ti.

En el caso de IIS7 (y superior), puede utilizar la función Módulo de reescritura de URLs para reescribir la cabecera del servidor o dejar su valor en blanco. En web.config (en un sitio o en el servidor en su conjunto), añada este contenido después de instalar el módulo de reescritura de URL:

<rewrite>    
  <outboundRules rewriteBeforeCache="true">
    <rule name="Remove Server header">
      <match serverVariable="RESPONSE_Server" pattern=".+" />
      <action type="Rewrite" value="" />
    </rule>
  </outboundRules>
</rewrite>

Puedes poner un valor personalizado en la acción de reescritura si lo deseas. Este ejemplo proviene de este artículo que también tiene otra gran información.

Para la cabecera MVC, en Global.asax:

MvcHandler.DisableMvcResponseHeader = true;

Editado el 11-12-2019 para actualizar la información de IIS7 ya que el enlace del blog de TechNet ya no era válido.

3 votos

Respuesta aceptada, ojalá pudiera compartir la respuesta con @squillman. Web.config para arreglar X-AspNet-Version: <system.web> <httpRuntime enableVersionHeader="false" /> </system.web>

1 votos

La eliminación de la cabecera X pone esto en mi web.config, así que ahórrate algo de tiempo: <system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>

0 votos

Broam, esa es la respuesta correcta... para IIS7. La pregunta es sobre IIS6. Esto no tiene ningún efecto en IIS6.

15voto

Warren Blanchet Puntos 881

Poniendo esto en el archivo web.config de una aplicación ASP.NET se eliminará la cabecera X-AspNet-Version:

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

Tenga en cuenta que la etiqueta system.web ya debería existir en el archivo. No cree un duplicado, sólo añada la etiqueta httpRuntime. Es posible que la etiqueta httpRuntime ya exista. Si es así, simplemente añada el atributo o establezca su valor si ya existe.

0 votos

Sin embargo, esto deja la cabecera "powered by".

0 votos

Pero cuando pongo esta línea de código en el system.web mi sitio web se cae. ¿saben por qué?

5voto

Prabu Puntos 951

Habiendo pasado por el ciclo de "endurecimiento" en mi proyecto actual - Ya escribí en el blog el enfoque que adoptamos, que incluye un HTTPModule para eliminar las siguientes cabeceras :

Servidor,
X-AspNet-Version,
X-AspNetMvc-Versión,
X-Powered-By

A continuación se reproducen los fragmentos pertinentes:

Pero no hay una manera fácil de eliminar la cabecera de respuesta del servidor a través de la configuración. Por suerte, IIS7 tiene una infraestructura de módulos administrables que le permite extender fácilmente su funcionalidad. A continuación se muestra la fuente de un HttpModule para eliminar una lista especificada de cabeceras de respuesta HTTP:

namespace Zen.Core.Web.CloakIIS
{
    #region Using Directives

    using System;
    using System.Collections.Generic;
    using System.Web;

    #endregion

    /// <summary>
    /// Custom HTTP Module for Cloaking IIS7 Server Settings to allow anonymity
    /// </summary>
    public class CloakHttpHeaderModule : IHttpModule
    {
        /// <summary>
        /// List of Headers to remove
        /// </summary>
        private List<string> headersToCloak;

        /// <summary>
        /// Initializes a new instance of the <see cref="CloakHttpHeaderModule"/> class.
        /// </summary>
        public CloakHttpHeaderModule()
        {
            this.headersToCloak = new List<string>
                                      {
                                              "Server",
                                              "X-AspNet-Version",
                                              "X-AspNetMvc-Version",
                                              "X-Powered-By",
                                      };
        }

        /// <summary>
        /// Dispose the Custom HttpModule.
        /// </summary>
        public void Dispose()
        {
        }

        /// <summary>
        /// Handles the current request.
        /// </summary>
        /// <param name="context">
        /// The HttpApplication context.
        /// </param>
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += this.OnPreSendRequestHeaders;
        }

        /// <summary>
        /// Remove all headers from the HTTP Response.
        /// </summary>
        /// <param name="sender">
        /// The object raising the event
        /// </param>
        /// <param name="e">
        /// The event data.
        /// </param>
        private void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            this.headersToCloak.ForEach(h => HttpContext.Current.Response.Headers.Remove(h));
        }
    }
}

Asegúrate de firmar el ensamblaje, luego puedes instalarlo en el GAC de tus servidores web y simplemente hacer la siguiente modificación en el web.config de tu aplicación (o si quieres que se aplique globalmente, en el machine.config):

<configuration>
    <system.webServer>
        <modules>
            <add name="CloakHttpHeaderModule" 
                 type="Zen.Core.Web.CloakIIS.CloakHttpHeaderModule, Zen.Core.Web.CloakIIS, 
                       Version=1.0.0.0, Culture=neutral, PublicKeyToken=<YOUR TOKEN HERE>" />
        </modules>
    </system.webServer>
</configuration>

2 votos

Suprimir la generación de las cabeceras por configuración parece tener mucho más sentido que tener las cabeceras generadas y luego eliminarlas.

1 votos

Parece que ese enlace está muerto. :-(

2voto

Nasir Mahmood Puntos 99

Utilizo el siguiente código y me funciona en iis 7.5

protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
}

4 votos

¿Y qué pasa con las imágenes y los contenidos que no pasan por el proceso de codificación?

0 votos

¿qué pusiste en el "Servidor"? ¿debería ser así? Response.Headers.Remove("Server: Microsoft-IIS/7.0"); ? o debería ser Server ? por favor ayuda

0 votos

Yo he puesto solo "Servidor" nada más. si tu nombre de cabecera es diferente puedes probarlo con otro nombre.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: