51 votes

Comment supprimer les en-têtes de réponse IIS/ASP.NET ?

J'ai quelques serveurs IIS/6.0 pour lesquels la sécurité me demande de supprimer quelques en-têtes de réponse qui sont envoyés aux navigateurs des clients lors des requêtes. Ils s'inquiètent de la divulgation d'informations relatives à la plate-forme par le biais des en-têtes de réponse. J'ai supprimé tous les HTTP-HEADERS de la configuration IIS pour le site web (X-Powered-By ou un autre en-tête de ce type).

(Personnellement, je sais que ces informations peuvent être facilement trouvées, même si elles sont cachées, mais ce n'est pas à moi d'en décider).

En-têtes que je souhaite supprimer :

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

Je sais aussi que ASP.NET MVC émet aussi son propre en-tête, si vous savez comment l'enlever aussi, ce serait utile.

  • X-AspNetMvc-Version - 1.0

64voto

Pour supprimer tous les en-têtes personnalisés qui divulguent trop d'informations - les méthodes sont variées (malheureusement) pour IIS 7 :

Nom de l'en-tête : X-Powered-By

Ajouter :

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

dans le <system.webServer> section.

Nom de l'en-tête : Serveur

Implémentez un module http qui supprime cet en-tête en appelant Response.Headers.Remove("Server") à partir de l'événement PreSendRequestHeaders. Une autre ressource pour cela : Masquer votre application Web ASP.NET MVC sur IIS 7

Nom de l'en-tête : X-AspNet-Version

Dans la section httpRuntime du web.config - définir :

<httpRuntime enableVersionHeader="false" />

Nom de l'en-tête : X-AspNetMvc-Version

À partir de l'événement Application_Start dans global.asax, exécutez le code suivant (C#) :

MvcHandler.DisableMvcResponseHeader = true;

33voto

Justin Scott Points 8728

Votre service de sécurité veut que vous fassiez cela pour rendre le type de serveur plus difficile à identifier. Cela pourrait réduire le nombre d'outils de piratage automatisés et rendre plus difficile l'accès au serveur.

Dans IIS, ouvrez les propriétés du site web, puis allez dans l'onglet En-têtes HTTP. La plupart des en-têtes X peuvent être trouvés et supprimés ici. Cette opération peut être effectuée pour des sites individuels ou pour l'ensemble du serveur (modifier les propriétés de l'objet Sites Web dans l'arborescence).

Pour l'en-tête Serveur, sur IIS6, vous pouvez utiliser le logiciel Microsoft URLScan à distance. Port 80 Software fabrique également un produit appelé Masque du serveur qui s'occupera de tout cela, et de bien d'autres choses encore, pour vous.

Pour IIS7 (et les versions ultérieures), vous pouvez utiliser l'option Module de réécriture d'URL pour réécrire l'en-tête du serveur ou supprimer sa valeur. Dans le fichier web.config (sur un site ou sur le serveur dans son ensemble), ajoutez ce contenu après l'installation du module de réécriture d'URL :

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

Vous pouvez mettre une valeur personnalisée dans l'action de réécriture si vous le souhaitez. Cet exemple provient de 本論文 qui contient également d'autres informations intéressantes.

Pour l'en-tête MVC, dans Global.asax :

MvcHandler.DisableMvcResponseHeader = true;

Editée le 11-12-2019 pour mettre à jour les informations sur IIS7 car le lien du blog TechNet n'était plus valide.

16voto

Warren Blanchet Points 881

L'ajout de ce paramètre dans le fichier web.config d'une application ASP.NET permet de se débarrasser de l'en-tête X-AspNet-Version :

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

Notez que la balise system.web doit déjà exister dans le fichier. Ne créez pas de doublon, ajoutez simplement la balise httpRuntime. La balise httpRuntime peut également exister. Si c'est le cas, ajoutez simplement l'attribut ou définissez sa valeur s'il existe déjà.

5voto

Prabu Points 951

Je viens de passer par le cycle de "durcissement" de mon projet actuel - J'ai publié un blog sur l'approche que nous avons adoptée, qui comprend un module HTTP permettant de supprimer les en-têtes suivants :

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

Des extraits pertinents sont reproduits ci-dessous :

Mais il n'existe pas de moyen simple de supprimer l'en-tête de réponse Server via la configuration. Heureusement, IIS7 dispose d'une infrastructure de modules pluggables gérés qui vous permet d'étendre facilement ses fonctionnalités. Vous trouverez ci-dessous la source d'un module HttpModule permettant de supprimer une liste spécifique d'en-têtes de réponse 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));
        }
    }
}

Assurez-vous de signer l'assemblage, puis installez-le dans le GAC de vos serveurs web et apportez simplement la modification suivante au web.config de votre application (ou, si vous voulez qu'elle soit appliquée globalement, au 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>

2voto

Nasir Mahmood Points 129

J'utilise le code suivant et cela fonctionne pour moi sur iis 7.5

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X