Dans IIS 7.0
integrated mode
Après avoir supprimé tous les en-têtes avec Response.ClearHeaders()
IIS ajouterait d'autres en-têtes comme Server
et X-Powered-By
Qui révèle de bonnes informations aux pirates. Comment puis-je arrêter ce comportement (pensez que j'ai encore besoin d'ajouter mes en-têtes personnalisés)?
Vous pouvez l'ajouter à votre Web.Config:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Mise à jour: si vous utilisez le framework MVC, je recommanderais également de supprimer le X-AspNetMvc-Version
et X-AspNet-Version
en-têtes également. Pour ce faire, définissez MvcHandler.DisableMvcResponseHeader = true
dans votre Global.asax
fichier et <system.web><httpRuntime enableVersionHeader="false" /></system.web>
dans votre Web.config
respectivement.
Le X-Powered-By
est configuré dans IIS. Sur Windows 7, c'est spécifiquement:
X-Powered-By
Je ne sais pas ce qui génère l'en-tête Server
.
Pour le mode intégré IIS7 +, eth0 l'a: <customHeaders>
tag dans web.config. Merci pour ça. Quant à l'en-tête "Serveur", si vous utilisez MVC, vous pouvez simplement ajouter:
protected void Application_PreSendRequestHeaders()
{
Response.Headers.Remove("Server");
}
à votre classe MvcApplication dans Global.asax. Sinon, vous pouvez simplement ajouter un module Http personnalisé, gérer l'événement PreSendRequestHeaders et faire la même chose.
Je voudrais ajouter ici que pour les versions ASP.NET Core où il n'y a plus de fichier web.config, une approche différente est nécessaire.
J'ai effectué les ajustements suivants pour supprimer les en-têtes dans ASP.NET Core 2.1:
Vous pouvez supprimer l'en-tête x-powered-by en remplaçant
<customHeaders>
<clear />
<add name="X-Powered-By" value="ASP.NET" />
</customHeaders>
avec
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
dans le fichier applicationhost.config trouvé dans le dossier .vs\config du projet.
L'en-tête du serveur peut être supprimé en ajoutant
.UseKestrel(c => c.AddServerHeader = false)
dans le fichier Program.cs.
La réponse suivante comprend une solution complète qui ne nécessite pas URLScan ou un HttpModule personnalisé et supprime tous les en-têtes associés que vous mentionnez. Il fonctionne également sur Azure.
URLScan peut être utilisé pour supprimer l'en-tête du serveur ou configurer un autre en-tête du serveur, http://learn.iis.net/page.aspx/938/urlscan-3-reference/
Mais cela n'empêche jamais vraiment un pirate de savoir ce que vous utilisez en fait. Il existe évidemment d'autres façons de détecter les informations de votre serveur.
Vous pouvez utiliser appcmd.exe (IIS 7 et supérieur) pour effectuer votre travail. Le script sera comme ceci:
C:\Windows\System32\inetsrv\appcmd.exe set config -section:system.webserver/httpProtocol /-customHeaders.["name='X-Powered-By'"] /commit:apphost
/commit:apphost
: Cela valide les paramètres de configuration dans la section d'emplacement appropriée du fichier ApplicationHost.config.
Je crée généralement un fichier batch de tous ces scripts que j'exécute sur le serveur Web après l'installation de l'application.
Pour les applications ASP.NET MVC, l'approche est différente et vous pouvez vous référer aux autres réponses données ici.