Comment supprimer ASP.Net en-têtes HTTP par défaut 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 puis-je empêcher ceux-ci de montrer?

156
demandé sur Paul Fryer 2010-08-05 23:45:04

11 réponses

Le "powered by" est un en-tête personnalisé dans IIS. La modification dépend de la version D'IIS que vous utilisez. Pour plus d'informations sur la façon de modifier ou de supprimer, voir ici:

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

Pour supprimer L'en-tête MVC,

Mondiale.asax, dans L'événement de démarrage de L'Application:

MvcHandler.DisableMvcResponseHeader = true;

Mettez ceci sur le web.config se débarrasser de L'en-tête X-AspNet-Version:

<system.web>
  <httpRuntime enableVersionHeader="false" />
</system.web>
245
répondu RedFilter 2018-02-16 10:00:18

Vous pouvez également les supprimer en ajoutant du code à votre global.fichier 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");
 }
93
répondu bkaid 2012-01-19 18:51:59

J'ai trouvé cette configuration dans mon web.config qui a New Web Site... créé dans Visual Studio (par opposition à un New Project...). Étant donné que la question stipule un ASP.NET application MVC, pas aussi pertinente, mais toujours une option.

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

Mise à jour : en outre, Troy Hunt a un article intitulé Shhh... ne laissez pas vos en-têtes de réponse parler trop fort avec des étapes détaillées sur la suppression de ces en-têtes ainsi qu'un lien vers son outil asafaweb pour les analyser et d'autres mesures de sécurité configuration.

49
répondu Kevin Hakanson 2013-08-10 14:22:03

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

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

Et supprimez L'en-tête X-AspNetMvc-Version en modifiant votre 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 site web.configuration:

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

Il y a pas de moyen facile de supprimer l'en-tête de réponse "serveur" via la configuration, mais vous pouvez implémenter un HttpModule pour supprimer des en-têtes HTTP spécifiques comme décrit dans masquer votre ASP.NET Application web MVC sur IIS 7 et dans how-to-remove-server-x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-from-the-response-header-in-iis7.

27
répondu RonyK 2014-10-22 16:59:52

.NET de Base

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

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

Pour dot net core 1, Mettre ajouter l'option à l'intérieur de la .Appel UseKestrel (). Pour Dot net core 2, Ajoutez la ligne après UseStartup ().

Pour supprimer l'en-tête X-Powered-By , Si vous le déployez sur IIS, modifiez votre site web.config et ajouter la section suivante à l'intérieur du système.tag serveur web:

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

. NET 4.5.2

Pour supprimer l'en-têteServer , dans votre global.asax fichier ajouter 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");
    }
}

Et ensuite dans votre web.config ajoutez la section 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 de plaisir.

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

Pour supprimer le "X-AspNetMvc-Version" tag, pour toute version de. Net, modifiez votre " web.config" fichier à inclure:

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

Merci Microsoft pour avoir rendu cela incroyablement difficile. Ou peut - être que c'était votre intention afin que vous puissiez suivre les installations IIS et MVC à travers le monde ...

23
répondu Rocklan 2018-03-12 23:50:35

Dans Asp.Net Core vous pouvez modifier le web.fichiers de configuration comme ceci:

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

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

            .UseKestrel(c =>
            {
                // removes the server header
                c.AddServerHeader = false;
            }) 
7
répondu Darxtar 2016-09-29 22:25:41

Comme indiqué sur la page Suppression des en-têtes de serveur standard sur les Sites Web Windows Azure , vous pouvez supprimer les en-têtes de la manière suivante:

<?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.

5
répondu Eric Dunaway 2015-11-19 21:26:50

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ère trouver une solution appropriée en utilisant le Web.config, mais l'utilisation de <rewrite> n'est pas bonne car elle nécessite l'installation du module de réécriture, et même alors, il ne supprimera pas vraiment l'en-tête, il suffit de le vider.

2
répondu Rudey 2017-10-13 23:07:31

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
répondu Emdadul Sawon 2016-07-01 11:12:30

L'en-tête X-Powered-By est ajouté par IIS à la réponse HTTP, de sorte que vous pouvez 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
répondu Mahesh Sdsraju 2017-11-03 07:52:54

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
répondu mitaka 2018-08-01 18:19:39