84 votes

Supprimer/Masquer/Désactivation excessive-têtes de réponse HTTP dans Azure/IIS7 sans UrlScan

J'ai besoin de supprimer excessive des en-têtes (surtout pour passer les tests de pénétration). J'ai passé du temps à chercher des solutions qui impliquent l'exécution d'UrlScan, mais elles sont lourdes comme UrlScan doit être installé à chaque fois qu'une instance Azure est commencé.

Il doit être une bonne solution pour Azure qui ne nécessite pas de déploiement des installateurs de démarrage.cmd.

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

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

Est-il possible de configurer (via le web.config etc.)? IIS7 pour supprimer/masquer/désactiver l'en-tête HTTP pour éviter le "Trop-Têtes" avertissement à asafaweb.comsans la création d'un module IIS ou de déployer des installateurs qui ont besoin d'être exécuté à chaque fois qu'une instance Azure commence?

138voto

giveme5minutes Points 1155

Les modifications suivantes vous permettent de supprimer ces-têtes de réponse HTTP dans Azure sans l'écriture d'un HttpModule personnalisé.

La plupart de l'information sur le net est mis à jour, et implique UrlScan (qui a depuis été intégré dans IIS7, mais avec l' RemoveServerHeader=1 option supprimé). Ci-dessous est la plus élégante solution que j'ai trouvé (grâce à ce blog, cette réponse, et de ce blog ).

Pour supprimer du Serveur, aller au Mondial.asax, trouver/créer l' Application_PreSendRequestHeaders événement et ajoutez le code suivant (merci à BK et ce blog ce sera pas non plus sur Cassini / local dev):

Édité avril 2014: Vous pouvez utiliser la PreSendRequestHeaders et PreSendRequestContext événements natif de modules IIS, mais ne les utilisez pas avec la gestion des modules qui implémentent IHttpModule. La définition de ces propriétés peuvent provoquer des problèmes avec des requêtes asynchrones. La version correcte est d'utiliser BeginRequest événement.

    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 web.config trouver/créer <system.web> et ajouter:

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

    ...

Pour supprimer X-AspNetMvc-Version, aller au Mondial.asax, trouver/créer l' Application_Start événement et ajouter une ligne comme suit:

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

Pour supprimer X-Powered-By, dans le web.config trouver/créer <system.webServer> et ajouter:

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

    ...

11voto

AKhooli Points 346

MSDN publié cet article sur la façon de masquer les en-têtes sur les Sites web Azure. Vous pouvez maintenant cacher le serveur de web.config en ajoutant une entrée dans le système.serveur

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

VS va froncer les sourcils au-dessus comme non valide. Le lien ci-dessus de code est comme les photos, difficile à trouver. MVC version est encore caché dans le démarrage de l'application comme ci-dessus, de même pour x-powered-by et .Version Net.

6voto

klings Points 546

Il y a aussi un paquet NuGet qui vous aide à atteindre cet objectif en quelques lignes de config et aucun changement de code: NWebsec. Les docs sur la suppression de la version en-têtes peuvent être trouvés ici: http://nwebsec.codeplex.com/wikipage?title=Suppressing%20version%20headers

Il est démontré ici: http://www.nwebsec.com/HttpHeaders/VersionHeaders (dans l'Azur)

Avertissement: je suis le développeur sur le projet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X