Scott Mitchell propose dans un article de blog des solutions pour supprimer les en-têtes inutiles .
Comme déjà dit ici dans d'autres réponses, pour l'en- Server
tête, il existe la solution de module http , ou une solution web.config pour IIS 10+ , ou vous pouvez utiliser URLRewrite à la place pour le supprimer .
La solution la plus pratique pour une configuration à jour (IIS 10 +) consiste à utiliser removeServerHeader
dans le web.config:
<system.webServer>
...
<security>
<requestFiltering removeServerHeader="true" />
</security>
...
</system.webServer>
Pour X-AspNet-Version
et X-AspNetMvc-Version
, il offre un meilleur moyen que de les supprimer à chaque réponse: simplement ne pas les générer du tout.
Utiliser enableVersionHeader
pour désactiver X-AspNet-Version
, dans web.config
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Utilisation MvcHandler.DisableMvcResponseHeader
dans l'événement .Net Application_Start pour la désactivationX-AspNetMvc-Version
MvcHandler.DisableMvcResponseHeader = true;
Et enfin, supprimez dans la configuration IIS l'en- X-Powered-By
tête personnalisé dans web.config.
<system.webServer>
...
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
Attention, si vous avez ARR (Application Request Routing), il ajoutera également le sien X-Powered-By
, qui ne sera pas supprimé par les paramètres d'en-têtes personnalisés. Celui-ci doit être supprimé via le gestionnaire IIS, configuration de l'éditeur sur la racine IIS (pas sur un site): accédez au system.webServer/proxy
nœud et définissez-le arrResponseHeader
sur false
. Après un IISReset
, il est pris en compte.
(J'ai trouvé celui-ci ici , sauf que cet article concerne l'ancienne manière de configurer les choses par IIS 6.0.)
N'oubliez pas que la solution par code d'application ne s'applique pas par défaut à l'en-tête généré sur le contenu statique (vous pouvez activer le runAllManagedModulesForAllRequests
pour modifier cela, mais cela entraîne toutes les requêtes à exécuter le pipeline .Net). Ce n'est pas un problème pourX-AspNetMvc-Version
car 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 l' name
attribut sur la forms
balise dans web.config), ASP.NET_SessionId
(utiliser <sessionState cookieName="yourName" />
dans web.config sous la system.web
balise), __RequestVerificationToken
(le modifier 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)).