Supprimer/Cacher / désactiver les en-têtes de réponse HTTP excessifs dans Azure / IIS7 sans UrlScan
j'ai besoin de supprimer excessive en-têtes (principalement pour passer les tests de pénétration). J'ai passé du temps à chercher des solutions qui impliquent L'exécution D'UrlScan, mais celles-ci sont encombrantes car UrlScan doit être installé chaque fois qu'une instance Azure est lancée .
il doit y avoir une bonne solution pour Azure qui n'implique pas le déploiement d'installateurs dès le démarrage.cmd.
je comprends que la réponse les en-têtes sont ajoutés dans endroits différents :
- Server : ajouté par IIS.
- X-AspNet-Version : ajouté par système.Web.dll au moment du rinçage dans la classe HttpResponse
- X-AspNetMvc-Version : ajouté par MvcHandler en System.Web.DLL.
- X-Powered-By : ajouté par IIS
Est-il un moyen de le 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.com , sans 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?
5 réponses
les modifications suivantes vous permettent de supprimer ces en-têtes de réponse HTTP dans Azure sans que n'écrive un HttpModule personnalisé.
la plupart des informations sur le net sont périmées, et impliquent UrlScan (qui a depuis été intégré dans IIS7, mais avec l'option RemoveServerHeader=1
supprimée). Ci-dessous est la meilleure solution que j'ai trouvé (grâce à ce blog , cette réponse , et ce blog combiné).
supprimer Serveur , aller au Mondial.asax, trouver / créer l'événement Application_PreSendRequestHeaders
et ajouter ce qui suit (merci à BK et ce blog cela ne manquera pas non plus sur Cassini / Local dev):
édité en avril 2014: vous pouvez utiliser les événements PreSendRequestHeaders et PreSendRequestContext avec les modules natifs IIS, mais ne ne pas les utiliser avec des modules gérés qui implémentent IHttpModule. La définition de ces propriétés peut causer des problèmes avec les requêtes asynchrones . La version correcte est D'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 web.config trouver/créer <system.web>
et d'ajouter:
<system.web>
<httpRuntime enableVersionHeader="false" />
...
supprimer X-AspNetMvc-Version , aller au Mondial.asax, trouver/créer Application_Start
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 d'ajouter:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
...
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 au système.webServer
<security>
<requestFiltering removeServerHeader ="true" />
</security>
va froncera les sourcils au-dessus comme invalide cependant. Le lien ci-dessus a le code comme pics, difficile à trouver. La version MVC est toujours cachée dans application start comme ci-dessus, de même pour la version X-powered-by et.net.
il y a aussi un paquet sur NuGet qui vous aide à atteindre cet objectif à travers quelques lignes de config et aucun changement au 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émo ici: http://www.nwebsec.com/HttpHeaders/VersionHeaders (en Azur)
Avertissement: je suis le développeur sur le projet.
récapitulant les réponses précédentes de @giveme5minutes et @AKhooli en ce qui concerne les sites Web Azure plus quelques autres éléments que le scanner veut voir, ce sont les changements que j'ai faits pour rendre ASafaWeb heureux avec un site Azure.
il se plaint toujours que le cookie d'en-tête d'affinité Azure n'est pas seulement https mais affinity est le type de cookie que vous voulez rediffuser 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>
la réponse de Nick Evans est parfaite, mais...
si vous retirez ces en-têtes pour un sécurité but, n'oubliez pas de changer le ASP.NET Session coockie name
!
Parce qu'il est plus facile de deviner la langue utilisée ou la version du serveur lorsque vous voyez ceci :
pour changer le nom du cookie: (soyez créatif)
<system.web>
<sessionState cookieName="PHPSESSID" />
</system.web>