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 est-ce que je les empêche de montrer?
"Propulsé par" est un en-tête personnalisé dans IIS. La modification dépend de la version de IIS que vous utilisez. Pour des informations sur la modification ou la suppression, voir ici:
http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
Pour supprimer l'en-tête MVC,
Dans Global.asax, dans l'événement Application Start:
MvcHandler.DisableMvcResponseHeader = true;
Mettez ceci dans le fichier web.config pour vous débarrasser de l'en-tête X-AspNet-Version:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
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");
}
J'ai trouvé cette configuration dans mon web.config
qui correspond à un New Web Site...
créé dans Visual Studio (par opposition à un New Project...
). Puisque la question indique une application ASP.NET MVC, elle n’est pas aussi pertinente, mais reste une option.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Mise à jour: Troy Hunt a également un article intitulé Chut… ne laissez pas vos en-têtes de réponse parler trop fort avec des étapes détaillées pour supprimer ces en-têtes ainsi qu'un lien vers son ASafaWeb tool pour numériser pour eux et d'autres configurations de sécurité.
Comme décrit dans Pour masquer 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 fichier 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’existe pas de moyen simple de supprimer l’en-tête de réponse "Serveur" via la configuration, mais vous pouvez implémenter une variable HttpModule
pour supprimer des en-têtes HTTP spécifiques, comme indiqué dans Visualisation de votre application Web ASP.NET MVC sur IIS 7 et in comment-supprimer-serveur-x-aspnet-version-x-aspnetmvc-version-et-x-powered-by-from-the-response-header-in-iis7 .
.NET Core
Pour supprimer l'en-tête Server , dans le fichier Program.cs , ajoutez l'option suivante:
.UseKestrel(opt => opt.AddServerHeader = false)
Pour dot net core 1, ajoutez l'option dans l'appel .UseKestrel (). Pour le noyau de points 2, ajoutez la ligne après UseStartup ().
Pour supprimer X-Powered-By header, s'il est déployé sur IIS, modifiez votre fichier 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);
}
}
}
});
}
}
Pre .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");
}
}
ensuite, 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 '' afin d'inclure:
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Merci à Microsoft d'avoir rendu cette tâche incroyablement difficile. Ou peut-être était-ce votre intention de pouvoir suivre IIS et les installations MVC à travers le monde ...
Dans Asp.Net Core, vous pouvez modifier les fichiers web.config comme suit:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Vous pouvez supprimer l'en-tête du serveur dans les options de Kestrel:
.UseKestrel(c =>
{
// removes the server header
c.AddServerHeader = false;
})
Comme indiqué sur Suppression des en-têtes de serveur standard sur les sites Web Windows Azure page, 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.
Par souci d'exhaustivité, il existe un autre moyen de supprimer l'en-tête Server
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érerais trouver une solution appropriée à l'aide de Web.config, mais utiliser <rewrite>
n'est pas bon, car le module de réécriture doit être installé, et même dans ce cas, l'en-tête ne sera pas vraiment supprimé, mais simplement vidé.
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>
Vous pouvez changer n'importe quel en-tête ou n'importe quoi dans Application_EndRequest()
essayez ceci
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
Vérifiez ce blog N'utilisez pas de code pour supprimer les en-têtes. Il est instable selon Microsoft
Mon point de vue 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>