Dans un billet de blog, Scott Mitchell propose des solutions pour suppression des en-têtes inutiles .
Comme déjà dit ici dans d'autres réponses, pour la Server
il y a l'en-tête solution de module http ou un Solution de web.config pour IIS 10+. ou vous pouvez utiliser URLRewrite à la place pour l'effacer .
Pour cette Server
la solution la plus pratique pour une installation à jour (IIS 10 +) est d'utiliser la fonction removeServerHeader
dans le web.config :
<system.webServer>
...
<security>
<requestFiltering removeServerHeader="true" />
</security>
...
</system.webServer>
Para X-AspNet-Version
y X-AspNetMvc-Version
Scott Mitchell propose une meilleure solution que de les supprimer à chaque réponse : il suffit de ne pas les générer du tout.
Utilisez enableVersionHeader
pour l'invalidation X-AspNet-Version
dans le web.config
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Utilisez MvcHandler.DisableMvcResponseHeader
dans l'événement Application_Start de .Net pour désactiver X-AspNetMvc-Version
MvcHandler.DisableMvcResponseHeader = true;
Et enfin, supprimez dans la configuration d'IIS le X-Powered-By
en-tête personnalisé dans le web.config.
<system.webServer>
...
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
Attention, si vous disposez d'un système ARR (Application Request Routing), il ajoutera également son propre système de gestion de la qualité. X-Powered-By
qui ne sera pas supprimé par les paramètres des en-têtes personnalisés. Celui-ci doit être supprimé par le gestionnaire IIS, configuration de l'éditeur sur la racine IIS (pas sur un site) : allez à system.webServer/proxy
et définir arrResponseHeader
a false
. Après une IISReset
il est pris en compte.
(J'ai trouvé celui-ci ici (sauf que cet article traite de l'ancienne façon de configurer IIS 6.0).
N'oubliez pas que la solution par code d'application ne s'applique pas par défaut aux en-têtes générés sur du contenu statique (vous pouvez activer la fonction runAllManagedModulesForAllRequests
pour changer cela, mais cela entraîne l'exécution de toutes les demandes par le pipeline .Net). Ce n'est pas un problème pour X-AspNetMvc-Version
puisqu'il n'est pas ajouté sur le contenu statique (du moins si les requêtes statiques ne sont pas exécutées dans le pipeline .Net).
Remarque : lorsque l'objectif est de masquer la technologie utilisée, vous devez également changer les noms de cookies standard .Net ( .ASPXAUTH
si l'authentification des formulaires est activée (utiliser name
l'attribut forms
dans le web.config), ASP.NET_SessionId
(utiliser <sessionState cookieName="yourName" />
dans web.config sous system.web
tag), __RequestVerificationToken
(changez-le par code avec AntiForgeryConfig.CookieName
mais ne s'applique malheureusement pas à l'entrée cachée que ce système génère dans le html)).