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?
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?
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 à votre web.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
, modifier Global.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 dans Global.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");
}
X-Powered-By
tête. Voir d'autres réponses sur la façon d'y parvenir dans web.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");
}
<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 un New Web Site...
créé dans Visual Studio (par opposition à a New 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é.
code
<security> <requestFiltering> <verbs> <add verb = "OPTIONS" allowed = "false" /> </verbs> </requestFiltering> </security>code
.NET Core
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>
.NET 4.5.2
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);
}
}
}
});
}
}
Avant .NET 4.5.2
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.
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 ...
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 .
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.
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;
})
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>
Par souci d'exhaustivité, il existe un autre moyen de supprimer le Server
tête, en utilisant regedit.
Créez une entrée DWORD appelée DisableServerHeader dans la clé de Registre suivante et définissez la valeur sur 1.
HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parameters
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.
Vous pouvez modifier n'importe quel en-tête ou quoi que Application_EndRequest()
ce soit en essayant ceci
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
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>