Como remover os cabeçalhos de resposta do IIS / ASP.NET

45

Eu tenho alguns servidores IIS / 6.0 que a segurança está me pedindo para remover alguns cabeçalhos de resposta que são enviados para os navegadores clientes em solicitações. Eles estão preocupados com a divulgação de informações da plataforma por meio de cabeçalhos de resposta. Eu removi todos os HTTP-HEADERS da configuração do IIS para o site (X-Powered-By ou algum desses cabeçalhos).

(Eu pessoalmente sei que esta informação pode ser facilmente encontrada, mesmo que esteja escondida, mas não é a minha chamada.)

Cabeçalhos que eu quero remover:

  • Servidor - Microsoft-IIS / 6.0
  • Versão X-AspNet - 2.0.50727

Eu também sei que a ASP.NET MVC também emite seu próprio cabeçalho, se você souber como removê-lo também, isso seria útil.

  • X-AspNetMvc-Version - 1.0
por Bryan Rehbein 12.06.2009 / 16:31

6 respostas

32

Seu departamento de segurança quer que você faça isso para tornar o tipo de servidor mais difícil de identificar. Isso pode diminuir a quantidade de ferramentas de hackers automatizadas e dificultar a invasão de pessoas no servidor.

No IIS, abra as propriedades do site e vá para a guia Cabeçalhos HTTP. A maioria dos cabeçalhos X pode ser encontrada e removida aqui. Isso pode ser feito para sites individuais ou para todo o servidor (modifique as propriedades do objeto Sites na árvore).

Para o cabeçalho do servidor, no IIS6 você pode usar a ferramenta URLScan da Microsoft para . A Port 80 Software também fabrica um produto chamado ServerMask que cuidará disso e muito mais para você.

Para o IIS7, há um ótimo artigo sobre o uso de um módulo personalizado para modificar o cabeçalho do Servidor.

Para o cabeçalho MVC, em Global.asax:

MvcHandler.DisableMvcResponseHeader = true;
    
por 12.06.2009 / 16:37
54

Para remover todos os cabeçalhos personalizados que revelam muita informação - os métodos são variados (infelizmente) para o IIS 7:

Nome do cabeçalho: X-Powered-By

Adicionar:

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

na seção <system.webServer> .

Nome do cabeçalho: Servidor

Implemente um httpModule que retire esse cabeçalho chamando Response.Headers.Remove ("Server") do evento PreSendRequestHeaders. Outro recurso para isso: ocultando seu aplicativo da Web ASP.NET MVC no IIS 7

Nome do cabeçalho: Versão do X-AspNet

Na seção httpRuntime do web.config - set:

<httpRuntime enableVersionHeader="false" />

Nome do cabeçalho: X-AspNetMvc-Version

A partir do evento Application_Start em global.asax - execute o seguinte código (C #):

MvcHandler.DisableMvcResponseHeader = true;
    
por 14.06.2010 / 16:58
16

Colocar isso no arquivo web.config de um aplicativo ASP.NET livrará o cabeçalho da versão X-AspNet:

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

Observe que a tag system.web já deve existir no arquivo. Não crie uma duplicata, apenas adicione a tag httpRuntime. A tag httpRuntime também já pode existir. Em caso afirmativo, basta adicionar o atributo ou definir seu valor se ele já estiver lá.

    
por 12.06.2009 / 16:43
4

Tendo acabado de passar pelo ciclo de "endurecimento" do meu projeto atual - Eu escrevi sobre a abordagem que tomamos, que inclui um HTTP Module para remover os seguintes cabeçalhos :

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

Peças pertinentes reproduzidas abaixo:

Mas não há uma maneira fácil de remover o cabeçalho de resposta do servidor por meio da configuração. Felizmente, o IIS7 tem uma infra-estrutura de módulos conectáveis gerenciados que permite estender facilmente sua funcionalidade. Abaixo está a fonte de um HttpModule para remover uma lista especificada de Cabeçalhos de Resposta 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));
        }
    }
}

Assegure-se de assinar o assembly, então você pode instalá-lo no GAC dos seus servidores web e simplesmente fazer a seguinte modificação no web.config do seu aplicativo (ou se você quiser que ele seja aplicado globalmente, ao 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>
    
por 26.08.2009 / 08:17
1

Eu uso o seguinte código e funciona para mim iis 7.5

protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
}
    
por 19.11.2014 / 10:22
0

Verifique este blog . Não use código para remover cabeçalhos de resposta. É instável, de acordo com Microsoft

Use a seção Cabeçalhos personalizados do Web.config:

<system.webServer>          
<httpProtocol>
    <!-- Security Hardening of HTTP response headers -->
    <customHeaders>
        <!--Sending the new X-Content-Type-Options response header with the value 'nosniff' will prevent 
                Internet Explorer from MIME-sniffing a response away from the declared content-type. -->
        <add name="X-Content-Type-Options" value="nosniff" />

        <!-- X-Frame-Options tells the browser whether you want to allow your site to be framed or not. 
                 By preventing a browser from framing your site you can defend against attacks like clickjacking. 
                 Recommended value "x-frame-options: SAMEORIGIN" -->
        <add name="X-Frame-Options" value="SAMEORIGIN" />

        <!-- Setting X-Permitted-Cross-Domain-Policies header to “master-only” will instruct Flash and PDF files that 
                 they should only read the master crossdomain.xml file from the root of the website. 
                 https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
        <add name="X-Permitted-Cross-Domain-Policies" value="master-only" />

        <!-- X-XSS-Protection sets the configuration for the cross-site scripting filter built into most browsers. 
                 Recommended value "X-XSS-Protection: 1; mode=block". -->
        <add name="X-Xss-Protection" value="1; mode=block" />

        <!-- Referrer-Policy allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites. 
                 If you have sensitive information in your URLs, you don't want to forward to other domains 
                 https://scotthelme.co.uk/a-new-security-header-referrer-policy/ -->
        <add name="Referrer-Policy" value="no-referrer-when-downgrade" />

        <!-- Remove x-powered-by in the response header, required by OWASP A5:2017 - Do not disclose web server configuration -->
        <remove name="X-Powered-By" />

        <!-- Ensure the cache-control is public, some browser won't set expiration without that  -->
        <add name="Cache-Control" value="public" />
    </customHeaders>
</httpProtocol>

<!-- Prerequisite for the <rewrite> section
            Install the URL Rewrite Module on the Web Server https://www.iis.net/downloads/microsoft/url-rewrite -->
<rewrite>
    <!-- Remove Server response headers (OWASP Security Measure) -->
    <outboundRules rewriteBeforeCache="true">
        <rule name="Remove Server header">
            <match serverVariable="RESPONSE_Server" pattern=".+" />

            <!-- Use custom value for the Server info -->
            <action type="Rewrite" value="Your Custom Value Here." />
        </rule>
    </outboundRules>
</rewrite>
</system.webServer>
    
por 01.08.2018 / 18:05