web-dev-qa-db-fra.com

Comment supprimer les en-têtes HTTP par défaut ASP.Net MVC?

Chaque page d'une application MVC avec laquelle je travaille définit ces en-têtes HTTP dans les réponses:

X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0

Comment est-ce que je les empêche de montrer? 

160
Paul Fryer

"Propulsé par" est un en-tête personnalisé dans IIS. La modification dépend de la version de IIS que vous utilisez. Pour des informations sur la modification ou la suppression, voir ici:

http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders

Pour supprimer l'en-tête MVC, 

Dans Global.asax, dans l'événement Application Start:

MvcHandler.DisableMvcResponseHeader = true;

Mettez ceci dans le fichier web.config pour vous débarrasser de l'en-tête X-AspNet-Version:

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

Vous pouvez également les supprimer en ajoutant du code à votre fichier global.asax:

 protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
 {
   HttpContext.Current.Response.Headers.Remove("X-Powered-By");
   HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");
   HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version");
   HttpContext.Current.Response.Headers.Remove("Server");
 }
101
bkaid

J'ai trouvé cette configuration dans mon web.config qui correspond à un New Web Site... créé dans Visual Studio (par opposition à un New Project...). Puisque la question indique une application ASP.NET MVC, elle n’est pas aussi pertinente, mais reste une option.

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <remove name="X-Powered-By" />
    </customHeaders>
   </httpProtocol>
</system.webServer>

Mise à jour: Troy Hunt a également un article intitulé Chut… ne laissez pas vos en-têtes de réponse parler trop fort avec des étapes détaillées pour supprimer ces en-têtes ainsi qu'un lien vers son ASafaWeb tool pour numériser pour eux et d'autres configurations de sécurité.

49
Kevin Hakanson

Comme décrit dans Pour masquer votre application Web ASP.NET MVC sur IIS 7 , vous pouvez désactiver l'en-tête X-AspNet-Version en appliquant la section de configuration suivante à votre web.config:

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

et supprimez l'en-tête X-AspNetMvc-Version en modifiant votre fichier Global.asax.cs comme suit:

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

Comme décrit dans En-têtes personnalisés Vous pouvez supprimer l'en-tête "X-Powered-By" en appliquant la section de configuration suivante à votre web.config:

<system.webServer>
   <httpProtocol>
      <customHeaders>
         <clear />
      </customHeaders>
   </httpProtocol>
</system.webServer>

Il n’existe pas de moyen simple de supprimer l’en-tête de réponse "Serveur" via la configuration, mais vous pouvez implémenter une variable HttpModule pour supprimer des en-têtes HTTP spécifiques, comme indiqué dans Visualisation de votre application Web ASP.NET MVC sur IIS 7 et in comment-supprimer-serveur-x-aspnet-version-x-aspnetmvc-version-et-x-powered-by-from-the-response-header-in-iis7 .

29
RonyK

.NET Core

Pour supprimer l'en-tête Server , dans le fichier Program.cs , ajoutez l'option suivante:

.UseKestrel(opt => opt.AddServerHeader = false)

Pour dot net core 1, ajoutez l'option dans l'appel .UseKestrel (). Pour le noyau de points 2, ajoutez la ligne après UseStartup (). 

Pour supprimer X-Powered-By header, s'il est déployé sur IIS, modifiez votre fichier web.config et ajoutez la section suivante à l'intérieur de la balise system.webServer:

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

.NET 4.5.2

Pour supprimer l’en-tête Server , dans votre fichier global.asax , ajoutez ce qui suit:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        string[] headers = { "Server", "X-AspNet-Version" };

        if (!Response.HeadersWritten)
        {
            Response.AddOnSendingHeaders((c) =>
            {
                if (c != null && c.Response != null && c.Response.Headers != null)
                {
                    foreach (string header in headers)
                    {
                        if (c.Response.Headers[header] != null)
                        {
                            c.Response.Headers.Remove(header);
                        }
                    }
                }
            });
        }

    }

Pre .NET 4.5.2

Ajoutez la classe c # suivante à votre projet:

public class RemoveServerHeaderModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    }

    public void Dispose() { }

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
        HttpContext.Current.Response.Headers.Remove("Server");
    }
}

ensuite, dans votre web.config, ajoutez la section <modules> suivante:

<system.webServer>
    ....
 <modules>
    <add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
 </modules>

Cependant, j'ai eu un problème où les sous-projets ne pouvaient pas trouver ce module. Pas drôle. 

Suppression de l'en-tête X-AspNetMvc-Version

Pour supprimer la balise '' X-AspNetMvc-Version '', pour toute version de .NET, modifiez votre fichier '' web.config '' afin d'inclure:

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

Merci à Microsoft d'avoir rendu cette tâche incroyablement difficile. Ou peut-être était-ce votre intention de pouvoir suivre IIS et les installations MVC à travers le monde ... 

23
Rocklan

Dans Asp.Net Core, vous pouvez modifier les fichiers web.config comme suit:

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

Vous pouvez supprimer l'en-tête du serveur dans les options de Kestrel:

            .UseKestrel(c =>
            {
                // removes the server header
                c.AddServerHeader = false;
            }) 
7
Darxtar

Comme indiqué sur Suppression des en-têtes de serveur standard sur les sites Web Windows Azure page, vous pouvez supprimer les en-têtes avec les éléments suivants:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
      </customHeaders>
    </httpProtocol>
    <security>
      <requestFiltering removeServerHeader="true"/>
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime enableVersionHeader="false" />
  </system.web>
</configuration>

Cela supprime l'en-tête du serveur et les en-têtes X.

Cela a fonctionné localement dans mes tests dans Visual Studio 2015.

7
Eric Dunaway

Par souci d'exhaustivité, il existe un autre moyen de supprimer l'en-tête Server en utilisant regedit.

Voir ce blog MSDN .

Créez une entrée DWORD appelée DisableServerHeader dans la clé de registre suivante et définissez la valeur sur 1.

HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters

Je préférerais trouver une solution appropriée à l'aide de Web.config, mais utiliser <rewrite> n'est pas bon, car le module de réécriture doit être installé, et même dans ce cas, l'en-tête ne sera pas vraiment supprimé, mais simplement vidé.

2
Rudey

L'en-tête X-Powered-By est ajouté par IIS à la réponse HTTP. Vous pouvez donc le supprimer même au niveau du serveur via IIS Manager:

Vous pouvez utiliser le web.config directement:

<system.webServer>
   <httpProtocol>
     <customHeaders>
       <remove name="X-Powered-By" />
     </customHeaders>
   </httpProtocol>
</system.webServer>
1
Mahesh Sdsraju

Vous pouvez changer n'importe quel en-tête ou n'importe quoi dans Application_EndRequest() essayez ceci

protected void Application_EndRequest()
{
    // removing excessive headers. They don't need to see this.
    Response.Headers.Remove("header_name");
}
1
Emdadul Sawon

Vérifiez ce blog N'utilisez pas de code pour supprimer les en-têtes. Il est instable selon Microsoft

Mon point de vue sur ceci:

<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>
0
mitaka