51 votos

Cómo quitar los encabezados de respuesta de IIS/ASP.NET

Tengo un par de servidores IIS/6.0 que seguridad me está pidiendo que elimine un par de encabezados de respuesta que se envían a los navegadores de los clientes en las solicitudes. Están preocupados por revelar información de la plataforma a través de los encabezados de respuesta. He eliminado todos los HTTP-HEADERS de la configuración de IIS para el sitio web (como X-Powered-By u otro encabezado similar).

(Personalmente sé que esta información puede encontrarse fácilmente, incluso si está oculta, pero no es decisión mía.)

Encabezados que quiero eliminar:

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

También sé que ASP.NET MVC emite su propio encabezado, si sabes cómo eliminarlo también, eso sería útil.

  • X-AspNetMvc-Version - 1.0

64voto

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

Nombre de la cabecera: X-Powered-By

Agregar:

en la sección .

Nombre de la cabecera: Server

Implementar un httpModule que elimine esta cabecera llamando a Response.Headers.Remove("Server") desde el evento PreSendRequestHeaders. Otro recurso para esto: Cloaking your ASP.NET MVC Web Application on IIS 7

Nombre de la cabecera: X-AspNet-Version

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

Nombre de la cabecera: X-AspNetMvc-Version

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

MvcHandler.DisableMvcResponseHeader = true;

1 votos

Me gustaría precisar algo: la mayoría de estos trucos solo funcionarán con IIS >=7 en modo de canalización integrada. En modo clásico, como mucho no hará nada ( líneas en web.config) o lanzará una excepción (llamadas directas a Response.Headers en global.asax, que es otra solución para eliminar encabezados). Estoy trabajando en un sitio web atascado en modo clásico y desafortunadamente no he podido quitar estos encabezados.

0 votos

¿Hay alguna forma de ocultar la versión de Asp.Net MVC en la configuración misma? Sé que puedo lograr esto en el archivo global.asax.cs, pero ¿qué pasa si quisiera hacerlo en el servidor IIS mismo?

33voto

Justin Scott Puntos 7630

Su departamento de seguridad quiere que haga esto para que sea más difícil identificar el tipo de servidor. Esto puede disminuir la avalancha de herramientas automatizadas de piratería y hacer que sea más difícil para las personas entrar en el servidor.

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

Para el encabezado del servidor, en IIS6 puede usar la herramienta URLScan de Microsoft para eliminarlo. Port 80 Software también tiene un producto llamado ServerMask que se encargará de eso, y mucho más, por usted.

Para IIS7 (y superior), puede usar el Módulo de Reescritura de URL para reescribir el encabezado del servidor o dejar en blanco su valor. En web.config (en un sitio o en el servidor en su conjunto), agregue este contenido después de que se haya instalado el Módulo de Reescritura de URL:

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

Para el encabezado 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 corregir X-AspNet-Version:

1 votos

La eliminación del encabezado X coloca esto en mi web.config, así que ahorra algo de tiempo:

0 votos

Broam, esa es la respuesta correcta ... para IIS7. La pregunta es sobre IIS6. Eso no tiene efecto en IIS6.

16voto

Warren Blanchet Puntos 881

Colocar esto en el archivo web.config de una aplicación ASP.NET se deshará del encabezado X-AspNet-Version:

Tenga en cuenta que la etiqueta system.web ya debería existir en el archivo. No cree un duplicado, simplemente agregue la etiqueta httpRuntime. Es posible que la etiqueta httpRuntime también ya exista. Si es así, simplemente agregue el atributo o establezca su valor si ya está presente.

0 votos

Sin embargo, esto deja el encabezado 'powered by'.

0 votos

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

5voto

Prabu Puntos 951

Después de haber pasado por el ciclo de "endurecimiento" en mi proyecto actual - escribí sobre el enfoque que tomamos, que incluye un HTTPModule para eliminar los siguientes encabezados:

Server,
X-AspNet-Version,
X-AspNetMvc-Version,
X-Powered-By

Piezas pertinentes reproducidas a continuación:

Pero no hay una manera fácil de eliminar el encabezado de respuesta del servidor a través de la configuración. Afortunadamente, IIS7 tiene una infraestructura de módulos administrados y enchufables que le permite extender fácilmente su funcionalidad. A continuación se muestra el código fuente de un HttpModule para eliminar una lista especificada de encabezados de respuesta HTTP:

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

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

    #endregion

    /// 
    /// Módulo HTTP personalizado para Cifrar la Configuración del Servidor IIS7 para permitir el anonimato
    /// 
    public class CloakHttpHeaderModule : IHttpModule
    {
        /// 
        /// Lista de encabezados para eliminar
        /// 
        private List headersToCloak;

        /// 
        /// Inicializa una nueva instancia de la clase .
        /// 
        public CloakHttpHeaderModule()
        {
            this.headersToCloak = new List
                                      {
                                              "Server",
                                              "X-AspNet-Version",
                                              "X-AspNetMvc-Version",
                                              "X-Powered-By",
                                      };
        }

        /// 
        /// Dispose del HttpModule personalizado.
        /// 
        public void Dispose()
        {
        }

        /// 
        /// Maneja la solicitud actual.
        /// 
        /// 
        /// El contexto de la HttpApplication.
        /// 
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += this.OnPreSendRequestHeaders;
        }

        /// 
        /// Elimina todos los encabezados de la respuesta HTTP.
        /// 
        /// 
        /// El objeto que genera el evento
        /// 
        /// 
        /// Los datos del evento.
        /// 
        private void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            this.headersToCloak.ForEach(h => HttpContext.Current.Response.Headers.Remove(h));
        }
    }
}

Asegúrese de firmar el ensamblado, luego puede instalarlo en el GAC de sus servidores web y simplemente hacer la siguiente modificación en el web.config de su aplicación (o si desea que se aplique globalmente, en machine.config):

2 votos

Suprimir la generación de los encabezados mediante la configuración parece tener mucho más sentido que generar los encabezados y luego eliminarlos.

1 votos

Parece que ese enlace ahora 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

¿Qué pasa con tus imágenes y contenido que no pasa por el pipeline de código?

0 votos

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

0 votos

He puesto solo "Servidor" nada más. Si el nombre de tu encabezado es diferente, puedes intentarlo con un nombre diferente.

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:

X