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

y a-t-il un moyen de supprimer l'en-tête de réponse" Server " de IIS7? Il y a des articles qui montrent que L'utilisation de HttpModules permet d'obtenir la même chose. Cela sera utile si nous n'avons pas le droit d'administrateur de serveur. Je ne veux pas non plus écrire ISAPI filter.

j'ai les droits d'administrateur sur mon serveur. Donc, je ne veux pas faire les trucs ci-dessus. Donc, s'il vous plaît aidez-moi à faire de même.

95
demandé sur Stijn 2009-07-24 20:47:47

16 réponses

ajoutez ceci à votre global.asax.cs:

protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
    Response.Headers.Remove("X-AspNet-Version");
    Response.Headers.Remove("X-AspNetMvc-Version");
}
96
répondu bkaid 2013-03-29 21:00:34

dans IIS7 vous devez utiliser un module HTTP. Construisez ce qui suit comme une bibliothèque de classe dans VS:

namespace StrongNamespace.HttpModules
{
  public class CustomHeaderModule : IHttpModule
  { 
    public void Init(HttpApplication context)
    {
      context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    } 

    public void Dispose() { } 

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
      HttpContext.Current.Response.Headers.Set("Server", "Box of Bolts");
    }
  }
}

puis ajouter ce qui suit à votre site web.config, ou configurez-le dans IIS (si vous configurez dans IIS, l'assemblée doit être dans le GAC).

<configuration>
  <system.webServer>
    <modules>
      <add name="CustomHeaderModule"
       type="StrongNamespace.HttpModules.CustomHeaderModule" />
    </modules>
  </system.webServer>
</configuration>
75
répondu lukiffer 2013-01-25 17:34:32

utiliser L'UrlRewrite 2.0

<outboundRules>
  <rule name="Remove RESPONSE_Server" >
    <match serverVariable="RESPONSE_Server" pattern=".+" />
    <action type="Rewrite" value="" />
  </rule>
</outboundRules>
32
répondu JeffZhnn 2013-01-25 17:31:49
fournit une meilleure façon que de les enlever sur chaque réponse: simplement ne pas les générer du tout.

Utiliser enableVersionHeader pour la désactivation de X-AspNet-Version , dans le site web.config

<httpRuntime enableVersionHeader="false" />

Utiliser MvcHandler.DisableMvcResponseHeader .Net Application_Start événement de désactivation de l' X-AspNetMvc-Version

MvcHandler.DisableMvcResponseHeader = true;

et enfin, supprimer en configuration IIS l'en-tête personnalisé X-Powered-By .

N'oubliez pas que solution par application le code ne s'applique pas par défaut à l'en-tête généré sur le contenu statique (vous pouvez activer le runAllManagedModulesForAllRequests pour changer cela, mais il fait tourner toutes les requêtes vers .Net pipeline). Ce n'est pas un problème pour X-AspNetMvc-Version car il n'est pas ajouté sur le contenu statique (du moins si la requête statique n'est pas exécutée dans .net pipeline).

Side note: lorsque le but est de masquer la technologie utilisée, vous devez également changer les noms de cookie standard .Net ( .ASPXAUTH si les formulaires auth activés (utiliser name attribut sur forms étiquette dans le web.config), ASP.NET_SessionId (utiliser <sessionState cookieName="yourName" /> dans web.la config dans system.web tag), __RequestVerificationToken (le changer par code avec AntiForgeryConfig.CookieName , mais, malheureusement, ne s'applique pas à l'caché d'entrée de ce système génère le html)).

25
répondu Frédéric 2017-05-23 10:31:16

en fait les modules codés et le Global.les exemples asax 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égliger ce point.

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

18
répondu Dan Ware 2013-02-15 11:00:35

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>
13
répondu Anders 2014-09-01 08:36:11

ajout à la réponse de réécriture D'URL , 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

11
répondu Vaibhav Garg 2017-05-23 11:54:43

pour supprimer l'en-tête Server: , allez à Global.asax , trouver / créer l'événement Application_PreSendRequestHeaders et ajouter une ligne comme suit (merci à BK et ce blog cela ne manquera pas non plus sur le Cassini / dev local):

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 liés sur Azure / IIS7 et 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.

10
répondu Nick Evans 2017-05-23 12:34:37

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

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");
        }
    }
}

puis dans Web.config :

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="CustomHeaderModule" type="Site.HideServerHeaderModule" />
  </modules>
</system.webServer>
9
répondu Drew Noakes 2013-01-25 17:31:18

essayez de définir l'entrée HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader d'un REG_DWORD de 1 .

5
répondu Richard Deeming 2013-01-25 17:32:39

UrlScan peut également supprimer l'en-tête du serveur en utilisant AlternateServerName= sous [options] .

4
répondu eddiegroves 2009-08-10 02:06:23

faisant suite à réponse d'eddiegroves , selon la version D'URLScan, vous pouvez préférer RemoveServerHeader=1 sous [options] .

Je ne suis pas sûr dans quelle version D'URLScan cette option a été ajoutée, mais elle a été disponible dans la version 2.5 et plus tard.

2
répondu techtician 2017-05-23 10:31:16

j'ai trouvé un article qui explique pourquoi nous devons faire à la fois Registre Modifier et utiliser un outil tel que UrlScan pour mettre en place ce dans IIS correctement. Je l'ai suivi sur nos serveurs et ça marche: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx . Si vous utilisez seulement UrlScan mais ne modifiez pas le Registre, pendant le temps que vous arrêtez le service de publication mondiale, votre serveur retournera la réponse http du serveur à partir du HTTP.sys fichier. Aussi, voici pitfals communs de L'utilisation de L'outil UrlScan: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008

2
répondu Pawel 2014-03-13 00:59:15

dans IIS 10, nous utilisons une solution similaire à L'approche de Drew, i.e.:

using System;
using System.Web;

namespace Common.Web.Modules.Http
{
    /// <summary>
    /// Sets custom headers in all requests (e.g. "Server" header) or simply remove some.
    /// </summary>
    public class CustomHeaderModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += OnPreSendRequestHeaders;
        }

        public void Dispose() { }

        /// <summary>
        /// Event handler that implements the desired behavior for the PreSendRequestHeaders event,
        /// that occurs just before ASP.NET sends HTTP headers to the client.
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            //HttpContext.Current.Response.Headers.Remove("Server");
            HttpContext.Current.Response.Headers.Set("Server", "MyServer");
        }
    }
}

et évidemment ajouter une référence à cette dll dans votre projet(s) et aussi le module dans la config(s) que vous voulez:

<system.webServer>
    <modules>
      <!--Use http module to remove/customize IIS "Server" header-->
      <add name="CustomHeaderModule" type="Common.Web.Modules.Http.CustomHeaderModule" />
    </modules>
</system.webServer>

note IMPORTANTE1: Cette solution nécessite un ensemble d'applications intégré;

NOTE IMPORTANTE 2: Toutes les réponses dans l'application web seront affectées par ceci (css et js

2
répondu xautau 2017-07-04 10:55:53

j'ai essayé toutes les choses ici et sur plusieurs autres fils de débordement de pile similaires.

j'ai été un peu bloqué parce que j'ai oublié de vider le cache de mon navigateur après avoir fait des changements de configuration. Si vous ne le faites pas et que le fichier se trouve dans votre cache local, il vous sera retourné avec les en-têtes originaux (duh).

je suis la plupart du temps de travail par retrait la runAllManagedModulesForAllRequests:

<modules runAllManagedModulesForAllRequests="true">

cela a enlevé les en-têtes étrangers de la plupart des fichiers statiques, mais je recevais toujours l'en-tête" Server " sur certains fichiers statiques dans mon projet WebAPI dans swagger.

j'ai finalement trouvé et appliqué cette solution et maintenant tous des en-têtes indésirables sont partis:

https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85

qui parle de son code qui est ici:

https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5

c'est un module de code natif. Il est capable de supprimer l'en-tête du Serveur, pas juste d'effacer la valeur. Par défaut, il supprime:

  • Serveur
  • X-Powered-By
  • X-Aspnet-Version
  • Server: Microsoft-HTTPAPI/2.0 -- qui serait remboursée si "la demande ne parvient pas à être transmis à IIS"
0
répondu TechSavvySam 2018-02-20 21:16:01

j'avais fait des recherches et la méthode URLRewrite fonctionne bien. Je n'arrive pas à trouver le changement dans le script. J'ai écrit ceci compatible avec PowerShell v2 et au-dessus et je l'ai testé sur IIS 7.5.

# Add Allowed Server Variable
    Add-WebConfiguration /system.webServer/rewrite/allowedServerVariables -atIndex 0 -value @{name="RESPONSE_SERVER"}
# Rule Name
    $ruleName = "Remove Server Response Header"
# Add outbound IIS Rewrite Rule
    Add-WebConfigurationProperty -pspath "iis:\" -filter "system.webServer/rewrite/outboundrules" -name "." -value @{name=$ruleName; stopProcessing='False'}
#Set Properties of newly created outbound rule 
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "serverVariable" -value "RESPONSE_SERVER"
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/match" -name "pattern" -value ".*"
    Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST"  -filter "system.webServer/rewrite/outboundRules/rule[@name='$ruleName']/action" -name "type" -value "Rewrite"
0
répondu Bill M 2018-06-05 13:53:27