sviluppo-web-qa.it

Come rimuovere le intestazioni di risposta IIS / ASP.NET

Ho un paio di server IIS/6.0 che la sicurezza mi sta chiedendo di rimuovere un paio di intestazioni di risposta che vengono inviate ai browser client su richiesta. Sono preoccupati per la divulgazione delle informazioni sulla piattaforma attraverso le intestazioni di risposta. Ho rimosso tutti i HTTP-HEADERS dalla IIS per il sito Web (X-Powered-By o qualche intestazione simile).

(So personalmente che questa informazione può essere facilmente scoperta, anche se è nascosta, ma non è la mia chiamata.)

Intestazioni che desidero rimuovere:

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

So anche che ASP.NET MVC emette anche la propria intestazione, se sai anche come rimuoverlo, sarebbe utile.

  • X-AspNetMvc-Version - 1.0
48
Bryan Rehbein

Il tuo dipartimento di sicurezza vuole che tu faccia questo per rendere il tipo di server più difficile da identificare. Ciò può ridurre la raffica di strumenti di hacking automatizzati e rendere più difficile la penetrazione nel server da parte delle persone.

All'interno di IIS, apri le proprietà del sito Web, quindi vai alla scheda Intestazioni HTTP. La maggior parte delle intestazioni X può essere trovata e rimossa qui. Questo può essere fatto per singoli siti o per l'intero server (modificare le proprietà dell'oggetto Siti Web nella struttura).

Per l'intestazione del server, su IIS6 è possibile utilizzare lo strumento Microsoft RLScan per remotare. Il software Port 80 produce anche un prodotto chiamato ServerMask che se ne occuperà, e molto di più, per te.

Per IIS7 (e versioni successive), è possibile utilizzare RL Rewrite Module per riscrivere l'intestazione del server o vuotare il suo valore. In web.config (in un sito o nel server nel suo insieme), aggiungi questo contenuto dopo aver installato il modulo di riscrittura URL:

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

Se lo desideri, puoi inserire un valore personalizzato nell'azione di riscrittura. Questo esempio proviene da questo articolo che contiene anche altre informazioni interessanti.

Per l'intestazione MVC, in Global.asax:

MvcHandler.DisableMvcResponseHeader = true;

Modificato l'11-12-2019 per aggiornare le informazioni su IIS7 poiché il collegamento al blog TechNet non era più valido.

32
Justin Scott

Per rimuovere tutte le intestazioni personalizzate che rivelano troppe informazioni, i metodi sono variati (purtroppo) per IIS 7:

Nome intestazione: X-Powered-By

Inserisci:

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

nel <system.webServer> sezione.

Nome intestazione: Server

Implementare un httpModule che elimina questa intestazione chiamando Response.Headers.Remove ("Server") dall'evento PreSendRequestHeaders. Un'altra risorsa per questo: Cloaking ASP.NET MVC Web Application on IIS 7

Nome intestazione: X-AspNet-Version

Nella sezione httpRuntime di web.config - impostare:

<httpRuntime enableVersionHeader="false" />

Nome intestazione: X-AspNetMvc-Version

Dall'evento Application_Start in global.asax: eseguire il codice seguente (C #):

MvcHandler.DisableMvcResponseHeader = true;
58
Adam

Mettendolo in un file web.config di un'applicazione ASP.NET si eliminerà l'intestazione X-AspNet-Version:

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

Si noti che il tag system.web dovrebbe già esistere nel file. Non creare un duplicato, basta aggiungere il tag httpRuntime. Il tag httpRuntime potrebbe anche esistere già. In tal caso, aggiungi semplicemente l'attributo o imposta il suo valore se è già presente.

16
squillman

Ho appena attraversato il ciclo di "hardening" sul mio progetto attuale - Ho scritto un blog sull'approccio che abbiamo adottato, che include un HTTPModule per rimuovere le seguenti intestazioni :

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

Pezzi pertinenti riprodotti di seguito:

Ma non esiste un modo semplice per rimuovere l'intestazione della risposta del server tramite la configurazione. Fortunatamente IIS7 ha un'infrastruttura a modulo gestibile che consente di estenderne facilmente la funzionalità. Di seguito è riportato l'origine di un HttpModule per la rimozione di un elenco specificato di intestazioni di risposta 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));
        }
    }
}

Assicurati di firmare l'Assemblea, quindi puoi installarlo nel GAC dei tuoi server web e apportare semplicemente la seguente modifica al web.config dell'applicazione (o se vuoi che sia applicato a livello globale, al 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>
5
HowardvanRooijen

Controlla questo blog . Non utilizzare il codice per rimuovere le intestazioni di risposta. È instabile secondo Microsoft

Utilizzare invece la sezione Intestazioni personalizzate 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>
2
mitaka

Uso il seguente codice e funziona per me iis 7.5

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

Uso una combinazione di Web.config e Global.asax.cs per eliminare tutte le intestazioni personalizzate, incluse le seguenti intestazioni:

  • Server
  • X-aspnet-Version
  • X-AspNetMvc-Version

Web.config:

<system.web> 
  <httpRuntime enableVersionHeader="false"/> 
</system.web>
<system.webServer>
   <httpProtocol>
      <customHeaders>
         <clear />
      </customHeaders>
   </httpProtocol>
</system.webServer> 

Global.asax.cs:

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

Vedi anche https://stackoverflow.com/a/20739875/1678525

0
Jan H