122 votes

Supprimer l'en-tête de réponse du serveur IIS7

Existe-t-il un moyen de supprimer l'en-tête de réponse "Server" de IIS7 ? Il existe des articles montrant que l'utilisation de HttpModules permet de réaliser la même chose. Cela sera utile si nous n'avons pas de droits d'administration sur le serveur. De plus, je ne veux pas écrire de filtre ISAPI.

J'ai des droits d'administration sur mon serveur. Je ne veux donc pas faire les choses ci-dessus. Alors, s'il vous plaît, aidez-moi à faire la même chose.

22voto

Stan Stare Points 131

En fait, les modules codés et les exemples Global.asax présentés ci-dessus ne fonctionnent que pour les requêtes valides.

Par exemple, ajoutez < à la fin de votre URL et vous obtiendrez une page "Bad request" qui expose toujours l'en-tête du serveur. Beaucoup de développeurs négligent ce point.

Les paramètres de registre indiqués ne fonctionnent pas non plus. URLScan est le SEUL moyen de supprimer l'en-tête "server" (au moins dans IIS 7.5).

18voto

Anders Points 49

Ou ajouter dans web.config :

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <remove name="X-AspNet-Version" />
            <remove name="X-AspNetMvc-Version" />
            <remove name="X-Powered-By" />
            <!-- <remove name="Server" />  this one doesn't work -->
        </customHeaders>
    </httpProtocol>
</system.webServer>

13voto

Vaibhav Garg Points 980

Ajout à la Réponse à URL Rewrite Voici le XML complet pour web.config

<system.webServer>
  <rewrite>
    <outboundRules>
      <rule name="Remove RESPONSE_Server" >
        <match serverVariable="RESPONSE_Server" pattern=".+" />
        <action type="Rewrite" value="Company name" />
      </rule>
    </outboundRules>
  </rewrite>
</system.webServer>

Réécriture d'URL

11voto

giveme5minutes Points 1155

Pour retirer le Server: l'en-tête, allez à Global.asax trouver/créer le Application_PreSendRequestHeaders et ajoutez une ligne comme suit (merci à BK y ce blog cela n'échouera pas non plus sur le dev local / Cassini) :

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    // Remove the "Server" HTTP Header from response
    HttpApplication app = sender as HttpApplication;
    if (null != app && null != app.Request && !app.Request.IsLocal &&
        null != app.Context && null != app.Context.Response)
    {
        NameValueCollection headers = app.Context.Response.Headers;
        if (null != headers)
        {
            headers.Remove("Server");
        }
    }
}

Si vous voulez une solution complète pour supprimer tous les en-têtes connexes sur Azure/IIS7 et qui fonctionne également avec Cassini, voir ce lien qui montre la meilleure façon de désactiver ces en-têtes sans utiliser HttpModules ou URLScan.

9voto

Drew Noakes Points 69288

Si vous souhaitez simplement supprimer l'en-tête, vous pouvez utiliser une version abrégée de la réponse de lukiffer :

using System.Web;

namespace Site
{
    public sealed class HideServerHeaderModule : IHttpModule
    {
        public void Dispose() { }

        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders +=
            (sender, e) => HttpContext.Current.Response.Headers.Remove("Server");
        }
    }
}

Et ensuite dans Web.config :

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="CustomHeaderModule" type="Site.HideServerHeaderModule" />
  </modules>
</system.webServer>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X