Chaque page d'une application MVC avec laquelle je travaille définit ces en-têtes HTTP dans les réponses:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Comment les empêcher de s'afficher?
asp.net-mvc
security
http-headers
Paul Fryer
la source
la source
Réponses:
X-Powered-By
est un en-tête personnalisé dans IIS. Depuis IIS 7, vous pouvez le supprimer en ajoutant ce qui suit à votreweb.config
:<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
Cet en-tête peut également être modifié selon vos besoins, pour plus d'informations, reportez-vous à http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
Ajoutez ceci à
web.config
pour vous débarrasser de l'en-X-AspNet-Version
tête:<system.web> <httpRuntime enableVersionHeader="false" /> </system.web>
Enfin, pour supprimer
X-AspNetMvc-Version
, modifierGlobal.asax.cs
et ajouter les éléments suivants dans l'Application_Start
événement:protected void Application_Start() { MvcHandler.DisableMvcResponseHeader = true; }
Vous pouvez également modifier les en-têtes lors de l'exécution via l'
Application_PreSendRequestHeaders
événement dansGlobal.asax.cs
. Ceci est utile si vos valeurs d'en-tête sont dynamiques:protected void Application_PreSendRequestHeaders(object source, EventArgs e) { Response.Headers.Remove("foo"); Response.Headers.Add("bar", "quux"); }
la source
X-Powered-By
tête. Voir d'autres réponses sur la façon d'y parvenir dansweb.config
.Vous pouvez également les supprimer en ajoutant du code à votre fichier global.asax:
protected void Application_PreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("X-Powered-By"); HttpContext.Current.Response.Headers.Remove("X-AspNet-Version"); HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version"); HttpContext.Current.Response.Headers.Remove("Server"); }
la source
<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> <redirectHeaders> <clear /> </redirectHeaders> </httpProtocol> </system.webServer>
J'ai trouvé cette configuration dans mon
web.config
qui était pour unNew Web Site...
créé dans Visual Studio (par opposition à aNew Project...
). Étant donné que la question indique une application ASP.NET MVC, pas aussi pertinente, mais toujours une option.<system.webServer> <httpProtocol> <customHeaders> <clear /> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
Mise à jour : De plus, Troy Hunt a un article intitulé Shhh… ne laissez pas vos en-têtes de réponse parler trop fort avec des étapes détaillées sur la suppression de ces en-têtes ainsi qu'un lien vers son outil ASafaWeb pour les rechercher et d'autres configurations de sécurité.
la source
code
<security> <requestFiltering> <verbs> <add verb = "OPTIONS" allowed = "false" /> </verbs> </requestFiltering> </security>code
Pour supprimer l'en- tête du serveur , dans le fichier Program.cs , ajoutez l'option suivante:
.UseKestrel(opt => opt.AddServerHeader = false)
Pour dot net core 1, ajoutez l'option à l'intérieur de l'appel .UseKestrel (). Pour dot net core 2, ajoutez la ligne après UseStartup ().
Pour supprimer l'en - tête X-Powered-By , s'il est déployé sur IIS, modifiez votre web.config et ajoutez la section suivante à l'intérieur de la balise system.webServer:
<httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol>
Pour supprimer l'en- tête Server , dans votre fichier global.asax , ajoutez ce qui suit:
protected void Application_BeginRequest(object sender, EventArgs e) { string[] headers = { "Server", "X-AspNet-Version" }; if (!Response.HeadersWritten) { Response.AddOnSendingHeaders((c) => { if (c != null && c.Response != null && c.Response.Headers != null) { foreach (string header in headers) { if (c.Response.Headers[header] != null) { c.Response.Headers.Remove(header); } } } }); } }
Ajoutez la classe c # suivante à votre projet:
public class RemoveServerHeaderModule : IHttpModule { public void Init(HttpApplication context) { context.PreSendRequestHeaders += OnPreSendRequestHeaders; } public void Dispose() { } void OnPreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("Server"); } }
puis dans votre web.config, ajoutez la section <modules> suivante:
<system.webServer> .... <modules> <add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" /> </modules>
Cependant, j'ai eu un problème où les sous-projets ne pouvaient pas trouver ce module. Pas drôle.
Suppression de l'en-tête X-AspNetMvc-Version
Pour supprimer la balise '' X-AspNetMvc-Version '', pour toute version de .NET, modifiez votre fichier '' web.config '' pour inclure:
<system.web> ... <httpRuntime enableVersionHeader="false" /> ... </system.web>
Merci Microsoft d'avoir rendu cela incroyablement difficile. Ou peut-être que c'était votre intention afin que vous puissiez suivre les installations IIS et MVC à travers le monde ...
la source
RemoveServerHeaderModule
cela ne fonctionnera pas dans le projet WebApi.Comme décrit dans Cloaking votre application Web ASP.NET MVC sur IIS 7 , vous pouvez désactiver l'en-tête X-AspNet-Version en appliquant la section de configuration suivante à votre web.config:
<system.web> <httpRuntime enableVersionHeader="false"/> </system.web>
et supprimez l'en-tête X-AspNetMvc-Version en modifiant votre Global.asax.cs comme suit:
protected void Application_Start() { MvcHandler.DisableMvcResponseHeader = true; }
Comme décrit dans En- têtes personnalisés Vous pouvez supprimer l'en-tête «X-Powered-By» en appliquant la section de configuration suivante à votre web.config:
<system.webServer> <httpProtocol> <customHeaders> <clear /> </customHeaders> </httpProtocol> </system.webServer>
Il n'y a pas de moyen simple de supprimer l'en-tête de réponse "Serveur" via la configuration, mais vous pouvez implémenter un
HttpModule
pour supprimer des en-têtes HTTP spécifiques comme décrit dans Cloaking votre application Web ASP.NET MVC sur IIS 7 et dans how-to-remove-server- x-aspnet-version-x-aspnetmvc-version-et-x-powered-by-from-the-response-header-in-iis7 .la source
Comme indiqué sur la page Suppression des en-têtes de serveur standard sur la page Sites Web Windows Azure , vous pouvez supprimer les en-têtes avec les éléments suivants:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <httpProtocol> <customHeaders> <clear /> </customHeaders> </httpProtocol> <security> <requestFiltering removeServerHeader="true"/> </security> </system.webServer> <system.web> <httpRuntime enableVersionHeader="false" /> </system.web> </configuration>
Cela supprime l'en-tête du serveur et les en-têtes X.
Cela a fonctionné localement dans mes tests dans Visual Studio 2015.
la source
Dans Asp.Net Core, vous pouvez modifier les fichiers web.config comme ceci:
<httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol>
Vous pouvez supprimer l'en-tête du serveur dans les options Kestrel:
.UseKestrel(c => { // removes the server header c.AddServerHeader = false; })
la source
Consultez ce blog N'utilisez pas de code pour supprimer les en-têtes. Il est instable selon Microsoft
Mon avis sur ceci:
<system.webServer> <httpProtocol> <!-- Security Hardening of HTTP response headers --> <customHeaders> <!--Sending the new X-Content-Type-Options response header with the value 'nosniff' will prevent Internet Explorer from MIME-sniffing a response away from the declared content-type. --> <add name="X-Content-Type-Options" value="nosniff" /> <!-- X-Frame-Options tells the browser whether you want to allow your site to be framed or not. By preventing a browser from framing your site you can defend against attacks like clickjacking. Recommended value "x-frame-options: SAMEORIGIN" --> <add name="X-Frame-Options" value="SAMEORIGIN" /> <!-- Setting X-Permitted-Cross-Domain-Policies header to “master-only” will instruct Flash and PDF files that they should only read the master crossdomain.xml file from the root of the website. https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html --> <add name="X-Permitted-Cross-Domain-Policies" value="master-only" /> <!-- X-XSS-Protection sets the configuration for the cross-site scripting filter built into most browsers. Recommended value "X-XSS-Protection: 1; mode=block". --> <add name="X-Xss-Protection" value="1; mode=block" /> <!-- Referrer-Policy allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites. If you have sensitive information in your URLs, you don't want to forward to other domains https://scotthelme.co.uk/a-new-security-header-referrer-policy/ --> <add name="Referrer-Policy" value="no-referrer-when-downgrade" /> <!-- Remove x-powered-by in the response header, required by OWASP A5:2017 - Do not disclose web server configuration --> <remove name="X-Powered-By" /> <!-- Ensure the cache-control is public, some browser won't set expiration without that --> <add name="Cache-Control" value="public" /> </customHeaders> </httpProtocol> <!-- Prerequisite for the <rewrite> section Install the URL Rewrite Module on the Web Server https://www.iis.net/downloads/microsoft/url-rewrite --> <rewrite> <!-- Remove Server response headers (OWASP Security Measure) --> <outboundRules rewriteBeforeCache="true"> <rule name="Remove Server header"> <match serverVariable="RESPONSE_Server" pattern=".+" /> <!-- Use custom value for the Server info --> <action type="Rewrite" value="Your Custom Value Here." /> </rule> </outboundRules> </rewrite> </system.webServer>
la source
Par souci d'exhaustivité, il existe un autre moyen de supprimer le
Server
tête, en utilisant regedit.Consultez ce blog MSDN .
Je préfère trouver une solution appropriée en utilisant Web.config, mais l'utilisation
<rewrite>
n'est pas bonne car elle nécessite l'installation du module de réécriture, et même dans ce cas, il ne supprimera pas vraiment l'en-tête, il suffit de le vider.la source
Vous pouvez modifier n'importe quel en-tête ou quoi que
Application_EndRequest()
ce soit en essayant ceciprotected void Application_EndRequest() { // removing excessive headers. They don't need to see this. Response.Headers.Remove("header_name"); }
la source
L'en-tête X-Powered-By est ajouté par IIS à la réponse HTTP, vous pouvez donc le supprimer même au niveau du serveur via IIS Manager:
Vous pouvez utiliser le web.config directement:
<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By" /> </customHeaders> </httpProtocol> </system.webServer>
la source