Existe-t-il un moyen de supprimer l'en-tête de réponse "Server" d'IIS7? Certains articles montrent qu'en utilisant HttpModules, nous pouvons réaliser la même chose. Cela sera utile si nous n'avons pas le droit d'administrateur sur le serveur. Je ne veux pas non plus écrire de filtre ISAPI.
J'ai des droits d'administrateur sur mon serveur. Donc je ne veux pas faire les choses ci-dessus. Alors, aidez-moi à faire de même.
Réponses:
Ajoutez ceci à votre global.asax.cs:
la source
NullReferenceException
à Cassini si vous comptez surHttpContext.Current
. Cet article de blog montre comment le faire tout en évitant de casser le support Cassini, si cela est important pour vous.PreSendRequestHeaders
dans une classe qui implémenteIHttpModule
ouGlobal.asax
. J'ai été témoin de l'événement gelant l'application sur le serveur sous une charge de stress. L'BeginRequest
événement devrait fonctionner pour apporter des modifications d'en-tête de réponse. Voir hanselman.com/blog/ChecklistWhatNOTToDoInASPNET.aspx .Dans IIS7, vous devez utiliser un module HTTP. Créez ce qui suit en tant que bibliothèque de classes dans VS:
Ajoutez ensuite ce qui suit à votre web.config, ou vous le configurez dans IIS (si vous configurez dans IIS, l'assembly doit être dans le GAC).
la source
HttpApplication
, laHttpRequest
, laHttpContext
, etHttpResponse
ne sont pasnull
, ainsi que la vérification quiHttpRequest.IsLocal
estfalse
.PreSendRequestHeaders
peut causer des problèmes avec HttpCacheModule , vous devriez utiliser quelque chose comme à laPostReleaseRequestState
place.Avec le module de réécriture d'URL version 2.0 pour IIS (UrlRewrite) activé, dans la section de configuration
<configuration>
➡<system.webServer>
➡<rewrite>
ajoutez la règle sortante:la source
rewrite
nœud danssystem.webServer
. Attention, cela plantera votre site si UrlRewrite n'est pas installé sur le serveur. Et vous feriez mieux d'utiliser d'abord la console de configuration IIS pour vérifier comment elle écrit ces nœuds de configuration.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:Pour
X-AspNet-Version
etX-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ésactiverX-AspNet-Version
, dans web.configUtilisation
MvcHandler.DisableMvcResponseHeader
dans l'événement .Net Application_Start pour la désactivationX-AspNetMvc-Version
Et enfin, supprimez dans la configuration IIS l'en-
X-Powered-By
tête personnalisé dans web.config.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 ausystem.webServer/proxy
nœud et définissez-learrResponseHeader
surfalse
. Après unIISReset
, 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 laforms
balise dans web.config),ASP.NET_SessionId
(utiliser<sessionState cookieName="yourName" />
dans web.config sous lasystem.web
balise),__RequestVerificationToken
(le modifier par code avecAntiForgeryConfig.CookieName
, mais ne s'applique malheureusement pas à l'entrée cachée que ce système génère dans le html)).la source
En fait, les modules codés et les exemples Global.asax présentés ci-dessus ne fonctionnent que pour les requêtes valides.
Par exemple, ajoutez <à la fin de votre URL et vous obtiendrez une page "Demande incorrecte" qui expose toujours l'en-tête du serveur. Beaucoup de développeurs oublient cela.
Les paramètres de registre affichés ne fonctionnent pas non plus. URLScan est le SEUL moyen de supprimer l'en-tête «serveur» (au moins dans IIS 7.5).
la source
Ou ajoutez dans web.config:
la source
X-AspNet-Version
et en-X-AspNetMvc-Version
tête. Ce que je sais, c'est que cette méthode ne fonctionne pas toujours (si cela fonctionne un jour). Voir la réponse @Frederic pour un moyen plus fiable de les supprimer.Cette
web.config
configuration fonctionne pour supprimer tous les en-têtes inutiles de la réponse ASP.NET (au moins à partir d'IIS 10):Veuillez noter que cela masque tous les en-têtes de "l'application", comme toutes les autres approches. Si, par exemple, vous atteignez une page par défaut ou une page d'erreur générée par IIS lui-même ou ASP.NET en dehors de votre application, ces règles ne s'appliqueront pas. Donc, idéalement, ils devraient être au niveau racine dans IIS et ce seuil peut laisser des réponses d'erreur à IIS lui-même.
PS Il y a un bogue dans IIS 10 qui fait parfois afficher l'en-tête du serveur même avec une configuration correcte. Cela devrait être corrigé maintenant, mais IIS / Windows doit être mis à jour.
la source
En plus de la réponse de réécriture d'URL , voici le XML complet pour
web.config
Réécriture d'URL
la source
Pour supprimer l'en-
Server:
tête, allez dansGlobal.asax
, recherchez / créez l'Application_PreSendRequestHeaders
événement et ajoutez une ligne comme suit (grâce à BK et à ce blog, cela n'échouera pas non plus sur le développement Cassini / local):Si vous souhaitez une solution complète pour supprimer tous les en-têtes associés sur Azure / IIS7 et fonctionne également avec Cassini, consultez ce lien , qui montre la meilleure façon de désactiver ces en-têtes sans utiliser HttpModules ou URLScan.
la source
Si vous souhaitez simplement supprimer l'en-tête, vous pouvez utiliser une version abrégée de la réponse de lukiffer:
Et puis dans
Web.config
:la source
Essayez de définir l'
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader
entrée de registre sur unREG_DWORD
sur1
.la source
OnPreSendRequestHeaders
gestionnaire d'événements (voir ci-dessus) ne se déclenche jamais, pour une raison quelconque.UrlScan peut également supprimer l'en-tête du serveur en utilisant
AlternateServerName=
under[options]
.la source
Suite à la réponse d'eddiegroves , en fonction de la version d'URLScan, vous pouvez plutôt préférer
RemoveServerHeader=1
sous[options]
.Je ne sais pas dans quelle version d'URLScan cette option a été ajoutée, mais elle était disponible dans la version 2.5 et ultérieure.
la source
J'ai trouvé un article qui explique pourquoi nous devons à la fois modifier le registre et utiliser un outil tel que UrlScan pour le configurer correctement dans IIS. Je l'ai suivi sur nos serveurs et cela fonctionne: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx . Si vous utilisez uniquement UrlScan mais que vous n'effectuez pas la modification du registre, pendant que vous arrêtez World Wide Publishing Service, votre serveur renvoie la réponse http du serveur à partir du fichier HTTP.sys. En outre, voici les pièges courants de l'utilisation de l'outil UrlScan: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008
la source
Dans IIS 10, nous utilisons une solution similaire à l'approche de Drew, à savoir:
Et évidemment, ajoutez une référence à cette dll dans votre (vos) projet (s) ainsi que le module dans la ou les config (s) que vous voulez:
REMARQUE IMPORTANTE 1: Cette solution nécessite un pool d'applications défini comme intégré;
REMARQUE IMPORTANTE2: Toutes les réponses de l'application Web seront affectées par cela (css et js inclus);
la source
J'avais recherché ceci et la méthode URLRewrite fonctionne bien. Je n'arrive pas à trouver le changement scripté n'importe où. J'ai écrit ceci compatible avec PowerShell v2 et supérieur et l'ai testé sur IIS 7.5.
la source
Vous pouvez ajouter le code ci-dessous dans le fichier Global.asax.cs
la source
La solution proposée ci-dessus en combinaison a fonctionné pour moi avec les changements suivants. Ici, je poste mon scénario et ma solution.
Pour moi, je voulais supprimer les en-têtes suivants:
J'ai ajouté ces derniers à mon global.asax:
L'événement ci-dessus ne se déclenchait pas, donc pour cela, j'ai ajouté le suivi à web.config, puis cela a fonctionné.
et pour supprimer l'en-tête de version, j'ai également ajouté ce qui suit à web.config:
Changements dans web.config:
J'espère que ça aide!
la source
J'ai essayé toutes les choses ici et sur plusieurs autres threads de débordement de pile similaires.
J'ai raccroché un peu parce que j'ai oublié de vider le cache de mon navigateur après avoir apporté des modifications de configuration. Si vous ne le faites pas et que le fichier est dans votre cache local, il vous le servira avec les en-têtes d'origine (duh).
Je l'ai fait fonctionner principalement en supprimant les runAllManagedModulesForAllRequests:
Cela a supprimé les en-têtes superflus de la plupart des fichiers statiques, mais j'obtenais toujours l'en-tête "Server" sur certains fichiers statiques de mon projet WebAPI dans swagger.
J'ai finalement trouvé et appliqué cette solution et maintenant tous les en-têtes indésirables ont disparu:
https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85
qui traite de son code qui se trouve ici:
https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5
Ceci est un module de code natif. Il est capable de supprimer l'en-tête du serveur, pas seulement de supprimer la valeur. Par défaut, il supprime:
la source
IIS 7.5 et éventuellement les versions plus récentes ont le texte d'en-tête stocké dans
iiscore.dll
À l'aide d'un éditeur hexadécimal, recherchez la chaîne et le mot «Serveur»
53 65 72 76 65 72
après et remplacez-les par des octets nuls. Dans IIS 7.5, cela ressemble à ceci:Contrairement à d'autres méthodes, cela n'entraîne pas de pénalité de performances. L'en-tête est également supprimé de toutes les demandes, même des erreurs internes.
la source