web-dev-qa-db-fra.com

Supprimer l'en-tête de réponse du serveur IIS 8.0/8.5

Comment pouvons-nous supprimer la réponse de l'en-tête du serveur dans IIS 8.0/8.5? 
Mon rapport de serveur actuel: Microsoft-IIS/8.0Microsoft-IIS/8.5
Pour IIS 7.0, j'ai utilisé URLScan 3.1. Toutefois, cela n'est pris en charge que pour IIS 7.0 et non 8.x

23
BastianW

Il existe une autre solution et à mon avis, cette solution est la meilleure et la plus sûre. 

Vous pouvez utiliser le module UrlRewrite créé par Microsoft. Le module de réécriture d'URL redirige votre URL et peut également modifier le nom de votre serveur IIS dans l'en-tête de la réponse. 

Vous n'êtes pas obligé d'utiliser la propriété de redirection. Vous pouvez simplement modifier la valeur de l'en-tête du serveur. 

Voici les étapes: 

  1. Commencez par télécharger le module UrlRewrite à partir de ce lien: http://www.iis.net/downloads/Microsoft/url-rewrite et installit sur votre serveur IIS. Après cela, redémarrez IIS avec cette commande sur cmd Console

    iisreset /restart
    
  2. Ajoutez l'élément suivant au fichier de configuration Web sous la balise <system.WebServer>. Vous pouvez écrire n'importe quoi sur l'élément Valeur en tant que nom de serveur.

    enter image description here

  3. Enfin, nous avons changé le nom de la version IIS dans l'en-tête des données. Redémarrez IIS à nouveau. via la console cmd.

  4. Bonus: Si vous voulez tester votre site web pour voir s'il fonctionne ou non ... Vous pouvez utiliser le plugin "HttpRequester" de mozilla firefox. pour ce plugin: https://addons.mozilla.org/En-us/firefox/addon/httprequester/

PS: Je l’ai testé et cela a fonctionné pour moi sur le serveur IIS. Pas sur le serveur temproray IIS créé par Visual Studio.

16
Mahmut EFE

Malheureusement, la plupart des recommandations que vous trouverez en ligne pour supprimer l'en-tête "Serveur" de IIS ne fonctionneront pas pour IIS 8.0 et 8.5. J'ai trouvé la seule option qui fonctionne et, à mon avis, la meilleure consiste à utiliser un module IIS Native-Code. 

Les modules Native-Code diffèrent des modules Managed les plus courants, car ils sont écrits à l'aide des API win32 plutôt que d'ASP.NET. Cela signifie qu'elles fonctionnent pour toutes les demandes (y compris les pages statiques et les images) plutôt que pour les demandes antérieures au pipeline ASP.NET. À l'aide d'un module de code natif, il est possible de supprimer les en-têtes indésirables à la toute fin de la demande, ce qui signifie que vous pouvez supprimer les en-têtes (y compris l'en-tête "Serveur"), quel que soit leur emplacement. 

Les fichiers binaires et le code source d'un exemple de module de code natif permettant de supprimer les en-têtes dans IIS 7.0 à 8.5 sont disponibles dans l'article suivant. 

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

8
ph1ll

Utilisez simplement une balise clear dans le segment des en-têtes personnalisés dans web.config:

<system.webServer>
   <httpProtocol>
      <customHeaders>
           <clear />
            <add name="X-Custom-Name1" value="MyCustomValue1" />
            <add name="X-Custom-Name2" value="MyCustomValue2" />
      </customHeaders>
   </httpProtocol>
</system.webServer>

Pour les en-têtes dynamiques, vous pouvez utiliser ce code dans Global.ascx: 

protected void Application_PreSendRequestHeaders() 
   {
       Response.Headers.Remove("Server");
       Response.AddHeader("Sample1", "Value1");
   }
3
Mohsen Unlimited

C'est simple comme bonjour. Il suffit de créer un module personnalisé:

public class HeaderStripModule : IHttpModule
{
    public void Init(HttpApplication application)
    {
        application.PreSendRequestHeaders += (sender, args) => HttpContext.Current.Response.Headers.Remove("Server");
    }

    public void Dispose(){}
}

Et puis enregistrez-vous dans web.config ou applicationHost.config si vous voulez une implémentation à l'échelle de la machine.

<system.webServer>
  <modules>
      <add name="HeaderStripModule" type="MyNamespace.HeaderStripModule" />
  </modules>
</system.webServer>
1
rism

URLScan a été arrêté à partir de IIS 7.5, car ses fonctionnalités sont censées être disponibles via l'option "filtrage des demandes" (fonctionnalité ajoutée dans IIS 7.5).

Mais l'option "Supprimer l'en-tête du serveur" de URLScan ne semble pas avoir d'équivalent dans le "filtrage des demandes".

Comme dit sur cette réponse et cette réponse à votre question , vous pouvez vider la Server avec URLRewrite, qui reste disponible sur IIS 8/8.5 (avec quelques mises à jour nécessaires pour avoir son dans la console d’administration IIS).

En regardant sur ce blog , il s'avère que URLScan peut toujours être installé sur IIS 8/8.5, si le manque de support officiel n’est pas un problème.

Je ne me suis pas testé. Voici les étapes:

  • Installez IIS 6 Compatibilité métabase (si pas déjà là)
  • Installer les filtres Isapi (si pas déjà là)
  • Installez URLScan (à partir du programme d'installation téléchargeable, pas du programme d'installation de la plate-forme Web)
  • Configurez URLScan via son fichier ini (par défaut dans C:\Windows\System32\inetsrv\urlscan)

Peut-être qu'une iisreset ou même un redémarrage devrait être fait. URLScan doit être visible dans IIS parmi les filtres Isapi.

0
Frédéric

Il est maintenant possible de supprimer l'en-tête Server de web.config à partir de IIS 10.0:

<security>
  <requestFiltering removeServerHeader ="true" />
</security>

Vous trouverez plus de détails sur la façon de supprimer tous les en-têtes non désirés/inutiles ici .

Veuillez noter que cela masque l'en-tête du serveur de "l'application", comme toutes les autres approches. Si vous par exemple atteindre une page par défaut ou une page d'erreur générée par IIS lui-même ou ASP.NET en dehors de votre application, ces règles ne s'appliqueront pas. Donc, idéalement, ils devraient se trouver au niveau racine dans IIS et ce dernier peut laisser des réponses d'erreur au IIS lui-même.

Il y a un bug dans IIS 10 qui fait parfois apparaître l'en-tête même avec config. Il devrait être corrigé maintenant, mais IIS/Windows doit être mis à jour.

0

Pour le problème ci-dessus, ajoutez le code ci-dessous dans Global.asax.cs

protected void Application_PreSendRequestHeaders() 
   {
       Response.Headers.Remove("Server");
       Response.AddHeader("Sample1", "Value1");
   }

Le problème a été résolu après tant de navigation.

0
Girish Arora