Ogni pagina in un'applicazione MVC con cui sto lavorando imposta queste intestazioni HTTP nelle risposte:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Come posso impedire che vengano visualizzati?
Ogni pagina in un'applicazione MVC con cui sto lavorando imposta queste intestazioni HTTP nelle risposte:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Come posso impedire che vengano visualizzati?
Risposte:
X-Powered-By
è un'intestazione personalizzata in IIS. Da IIS 7, è possibile rimuoverlo aggiungendo quanto segue a web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Questa intestazione può anche essere modificata in base alle proprie esigenze, per ulteriori informazioni consultare http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
Aggiungi questo per web.config
eliminare l' X-AspNet-Version
intestazione:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
Infine, per rimuovere X-AspNetMvc-Version
, modificare Global.asax.cs
e aggiungere quanto segue Application_Start
nell'evento:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
È inoltre possibile modificare le intestazioni in fase di esecuzione tramite l' Application_PreSendRequestHeaders
evento in Global.asax.cs
. Ciò è utile se i valori dell'intestazione sono dinamici:
protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
Response.Headers.Remove("foo");
Response.Headers.Add("bar", "quux");
}
X-Powered-By
intestazione. Vedi altre risposte su come raggiungere questo obiettivo web.config
.
Puoi anche rimuoverli aggiungendo codice al tuo file 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>
Ho trovato questa configurazione nella mia web.config
che era per un New Web Site...
creato in Visual Studio (al contrario di a New Project...
). Poiché la domanda indica un'applicazione ASP.NET MVC, non pertinente, ma comunque un'opzione.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Aggiornamento : Troy Hunt ha un articolo intitolato Shhh ... non lasciare che le intestazioni delle tue risposte parlino troppo forte con passaggi dettagliati sulla rimozione di queste intestazioni e un link al suo strumento ASafaWeb per la scansione per loro e altre configurazioni di sicurezza.
code
<security> <requestFiltering> <verbs> <add verb = "OPTIONS" consentita = "false" /> </verbs> </requestFiltering> </security>code
.NET Core
Per rimuovere l' intestazione del server , all'interno del file Program.cs , aggiungere la seguente opzione:
.UseKestrel(opt => opt.AddServerHeader = false)
Per dot net core 1, aggiungi l'opzione all'interno della chiamata .UseKestrel (). Per dot net core 2, aggiungere la riga dopo UseStartup ().
Per rimuovere l' intestazione X-Powered-By , se distribuito su IIS, modifica il tuo web.config e aggiungi la seguente sezione all'interno del tag system.webServer:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
.NET 4.5.2
Per rimuovere l' intestazione del server , nel file global.asax aggiungere quanto segue:
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
Aggiungi la seguente classe c # al tuo progetto:
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");
}
}
e poi nel tuo web.config aggiungi la seguente sezione <modules>:
<system.webServer>
....
<modules>
<add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
</modules>
Tuttavia ho avuto un problema in cui i sottoprogetti non riuscivano a trovare questo modulo. Non è divertente.
Per rimuovere il tag '' X-AspNetMvc-Version '', per qualsiasi versione di .NET, modificare il file '' web.config '' per includere:
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Grazie Microsoft per aver reso questo incredibilmente difficile. O forse era questa la tua intenzione in modo da poter monitorare le installazioni di IIS e MVC in tutto il mondo ...
RemoveServerHeaderModule
che non funzionerà nel progetto WebApi.
Come descritto in Cloaking dell'applicazione Web ASP.NET MVC su IIS 7 , è possibile disattivare l'intestazione X-AspNet-Version applicando la seguente sezione di configurazione a web.config:
<system.web>
<httpRuntime enableVersionHeader="false"/>
</system.web>
e rimuovi l'intestazione X-AspNetMvc-Version modificando Global.asax.cs come segue:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Come descritto nelle intestazioni personalizzate È possibile rimuovere l' intestazione "X-Powered-By" applicando la seguente sezione di configurazione al proprio web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
</system.webServer>
Non esiste un modo semplice per rimuovere l'intestazione della risposta "Server" tramite la configurazione, ma è possibile implementare una HttpModule
per rimuovere specifiche intestazioni HTTP come descritto in Mantenimento dell'applicazione Web ASP.NET MVC su IIS 7 e in come rimuovere-server- x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-from-response-header-in-iis7 .
Come mostrato in Rimozione delle intestazioni del server standard nella pagina dei siti Web di Windows Azure , è possibile rimuovere le intestazioni con quanto segue:
<?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>
Ciò rimuove l'intestazione del server e le intestazioni X.
Questo ha funzionato localmente nei miei test in Visual Studio 2015.
In Asp.Net Core è possibile modificare i file web.config in questo modo:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Puoi rimuovere l'intestazione del server nelle opzioni di Kestrel:
.UseKestrel(c =>
{
// removes the server header
c.AddServerHeader = false;
})
Controlla questo blog Non utilizzare il codice per rimuovere le intestazioni. È instabile secondo Microsoft
La mia opinione su questo:
<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>
Per completezza, c'è un altro modo per rimuovere l' Server
intestazione, usando regedit.
Creare una voce DWORD denominata DisableServerHeader nella seguente chiave del Registro di sistema e impostare il valore su 1.
HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parameters
Preferirei trovare una soluzione adeguata utilizzando Web.config, ma l'utilizzo <rewrite>
non è buono perché richiede l'installazione del modulo di riscrittura e anche in questo caso non rimuoverà davvero l'intestazione, ma svuotala.
Puoi cambiare qualsiasi intestazione o qualsiasi cosa in Application_EndRequest()
prova questo
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
L'intestazione X-Powered-By viene aggiunta da IIS alla risposta HTTP, quindi è possibile rimuoverla anche a livello di server tramite Gestione IIS:
È possibile utilizzare direttamente web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>