web-dev-qa-db-fra.com

Suppression / masquage / désactivation des en-têtes de réponse HTTP excessifs dans Azure / IIS7 sans UrlScan

J'ai besoin d'enlever en-têtes excessives (principalement pour réussir les tests d'intrusion). J'ai passé beaucoup de temps à rechercher des solutions impliquant l'exécution d'UrlScan, mais elles sont lourdes car rlScan doit être installé à chaque démarrage d'une instance Azure .

Il doit exister une bonne solution pour Azure qui ne nécessite pas le déploiement d’installateurs à partir de startup.cmd.

Je comprends que les en-têtes de réponse sont ajoutés dans endroits différents :

  • Serveur : ajouté par IIS.
  • X-AspNet-Version : ajouté par System.Web.dll au moment du vidage dans la classe HttpResponse
  • X-AspNetMvc-Version : Ajouté par MvcHandler dans System.Web.dll.
  • X-Powered-By : ajouté par IIS

Existe-t-il un moyen de configurer (via web.config, etc.?) IIS7 pour supprimer/masquer/désactiver les en-têtes de réponse HTTP afin d'éviter l'avertissement "En-têtes excessifs" à l'adresse asafaweb.com , sans créer de = IIS ou déploiement d'installateurs à exécuter chaque fois qu'une instance Azure est lancée?

80
Nick Evans

Les modifications suivantes vous permettent de supprimer ces en-têtes de réponse HTTP dans Azure sans en écrivant un HttpModule personnalisé.

La plupart des informations sur le réseau sont obsolètes et concernent UrlScan (intégré depuis dans IIS7, mais avec le RemoveServerHeader=1 option supprimée). Vous trouverez ci-dessous la solution la plus simple que j'ai trouvée ( ce blog , cette réponse , et cette blog combiné).

Pour supprimer Serveur , accédez à Global.asax, recherchez/créez le Application_PreSendRequestHeaders événement et ajoutez ce qui suit (merci à [~ # ~] bk [~ # ~] et ce blog ce sera pas non plus échouer sur Cassini/dev local):

Édité en avril 2014: vous pouvez utiliser les événements PreSendRequestHeaders et PreSendRequestContext avec des modules natifs IIS, mais ne les utilisez pas avec des modules gérés implémentant IHttpModule.) La définition de ces propriétés peut entraîner des problèmes avec demandes asynchrones . La version correcte consiste à utiliser l'événement BeginRequest.

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var application = sender as HttpApplication;
        if (application != null && application.Context != null)
        {
            application.Context.Response.Headers.Remove("Server");
        }
    }

Pour supprimer X-AspNet-Version , dans le fichier Web.config, recherchez/créez <system.web> et ajouter:

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

    ...

Pour supprimer X-AspNetMvc-Version , accédez au fichier Global.asax, recherchez/créez le fichier Application_Start événement et ajoutez une ligne comme suit:

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

Pour supprimer X-Powered-By , dans le fichier Web.config, recherchez/créez <system.webServer> et ajouter:

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

    ...
135
Nick Evans

Publication MSDN cet article explique comment masquer les en-têtes sur les sites Web Azure. Vous pouvez maintenant masquer le serveur de web.config en ajoutant une entrée à system.webServer

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

VS verra ce qui précède comme invalide. Le lien ci-dessus contient du code sous forme de photos, difficile à trouver. La version de MVC est toujours masquée au démarrage de l'application comme ci-dessus, de même pour la version x-powered-by et .Net.

10
AKhooli

Il existe également un paquet sur NuGet qui vous aide à y parvenir grâce à quelques lignes de configuration et à aucune modification du code: NWebsec. Les documents sur la suppression des en-têtes de version peuvent être trouvés ici: https://github.com/NWebsec/NWebsec/wiki/Suppressing-version-headers

C'est démontré ici: http://www.nwebsec.com/HttpHeaders/VersionHeaders (dans Azure)

Disclaimer: Je suis le développeur du projet.

6
klings

La réponse de Nick Evans est parfaite, mais ...

Si vous supprimez ces en-têtes à des fins de sécurité , n'oubliez pas de modifier le ASP.NET Session coockie name! Parce qu'il est plus facile de deviner la langue utilisée ou la version du serveur quand vous voyez ceci:

enter image description here

Pour changer le nom du cookie: (soyez créatif)

<system.web>
  <sessionState cookieName="PHPSESSID" />
</system.web>
5

En reprenant les réponses précédentes de @ giveme5minutes et de @AKhooli en ce qui concerne les sites Web Azure, ainsi que quelques autres éléments que le scanner souhaite voir, il s’agit des modifications que j’ai apportées pour que ASafaWeb soit heureux avec un site Azure.

Il se plaint toujours du fait que le cookie d'en-tête par affinité Azure ne soit pas uniquement https mais que l'affinité est le type de cookie que vous souhaitez lire de toute façon, n'est-ce pas?

<system.web>
    <compilation debug="false">
    <httpRuntime enableVersionHeader="false" />
    <httpCookies httpOnlyCookies="true" requireSSL="true" />    
    <customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx" />
</system.web>

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="DENY" />
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
    <security>
      <!--removes Azure headers-->
      <requestFiltering removeServerHeader="true" />
    </security>
</system.webServer>
3
Timothy Lee Russell