Cada página en una aplicación MVC con la que estoy trabajando establece estos encabezados HTTP en las respuestas:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
¿Cómo evito que se muestren?
Cada página en una aplicación MVC con la que estoy trabajando establece estos encabezados HTTP en las respuestas:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
¿Cómo evito que se muestren?
Respuestas:
X-Powered-By
es un encabezado personalizado en IIS. Desde IIS 7, puede eliminarlo agregando lo siguiente a su web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Este encabezado también se puede modificar según sus necesidades; para obtener más información, consulte http://www.iis.net/ConfigReference/system.webServer/httpProtocol/customHeaders
Agregue esto a web.config
para deshacerse del X-AspNet-Version
encabezado:
<system.web>
<httpRuntime enableVersionHeader="false" />
</system.web>
Finalmente, para eliminar X-AspNetMvc-Version
, editar Global.asax.cs
y agregar lo siguiente en el Application_Start
evento:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
También puede modificar encabezados en tiempo de ejecución a través del Application_PreSendRequestHeaders
evento en Global.asax.cs
. Esto es útil si sus valores de encabezado son dinámicos:
protected void Application_PreSendRequestHeaders(object source, EventArgs e)
{
Response.Headers.Remove("foo");
Response.Headers.Add("bar", "quux");
}
X-Powered-By
encabezado. Vea otras respuestas sobre cómo lograr esto en web.config
.
También puede eliminarlos agregando código a su archivo 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>
Encontré esta configuración en mi web.config
que era para un New Web Site...
creado en Visual Studio (en lugar de a New Project...
). Como la pregunta establece una aplicación ASP.NET MVC, no es tan relevante, pero sigue siendo una opción.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
Actualización : Además, Troy Hunt tiene un artículo titulado Shhh ... no permita que sus encabezados de respuesta hablen demasiado alto con pasos detallados sobre cómo eliminar estos encabezados, así como un enlace a su herramienta ASafaWeb para buscarlos y otras configuraciones de seguridad.
code
<security> <requestFiltering> <verbs> <add verb = "OPTIONS" allowed = "false" /> </verbs> </requestFiltering> </security>code
.NET Core
Para eliminar el encabezado del servidor , dentro del archivo Program.cs , agregue la siguiente opción:
.UseKestrel(opt => opt.AddServerHeader = false)
Para dot net core 1, agregue la opción dentro de la llamada .UseKestrel (). Para dot net core 2, agregue la línea después de UseStartup ().
Para eliminar el encabezado X-Powered-By , si se implementa en IIS, edite su web.config y agregue la siguiente sección dentro de la etiqueta system.webServer:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
.NET 4.5.2
Para eliminar el encabezado del servidor , dentro de su archivo global.asax agregue lo siguiente:
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
Agregue la siguiente clase de C # a su proyecto:
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");
}
}
y luego dentro de su web.config agregue la siguiente sección <modules>:
<system.webServer>
....
<modules>
<add name="RemoveServerHeaderModule" type="MyNamespace.RemoveServerHeaderModule" />
</modules>
Sin embargo, tuve un problema donde los subproyectos no podían encontrar este módulo. No es divertido.
Para eliminar la etiqueta '' X-AspNetMvc-Version '', para cualquier versión de .NET, modifique su archivo '' web.config '' para incluir:
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Gracias a Microsoft por hacer esto increíblemente difícil. O tal vez esa era su intención para poder rastrear las instalaciones de IIS y MVC en todo el mundo ...
RemoveServerHeaderModule
que no va a funcionar en el proyecto WebApi.
Como se describe en Encubrimiento de su aplicación web ASP.NET MVC en IIS 7 , puede desactivar el encabezado X-AspNet-Version aplicando la siguiente sección de configuración a su web.config:
<system.web>
<httpRuntime enableVersionHeader="false"/>
</system.web>
y elimine el encabezado X-AspNetMvc-Version alterando su Global.asax.cs de la siguiente manera:
protected void Application_Start()
{
MvcHandler.DisableMvcResponseHeader = true;
}
Como se describe en Encabezados personalizados Puede eliminar el encabezado "X-Powered-By" aplicando la siguiente sección de configuración a su web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
</customHeaders>
</httpProtocol>
</system.webServer>
No hay una manera fácil de eliminar el encabezado de respuesta "Servidor" a través de la configuración, pero puede implementar un HttpModule
para eliminar encabezados HTTP específicos como se describe en Encubrimiento de su aplicación web ASP.NET MVC en IIS 7 y en cómo eliminar servidor. x-aspnet-version-x-aspnetmvc-version-and-x-powered-by-from-response-header-in-iis7 .
Como se muestra en la eliminación de encabezados de servidor estándar en la página de sitios web de Windows Azure , puede eliminar encabezados con lo siguiente:
<?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>
Esto elimina el encabezado del servidor y los encabezados X.
Esto funcionó localmente en mis pruebas en Visual Studio 2015.
En Asp.Net Core puede editar los archivos web.config de esta manera:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Puede eliminar el encabezado del servidor en las opciones de Kestrel:
.UseKestrel(c =>
{
// removes the server header
c.AddServerHeader = false;
})
Consulte este blog No use código para eliminar encabezados. Es inestable según Microsoft
Mi opinión sobre esto:
<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>
En aras de la integridad, hay otra forma de eliminar el Server
encabezado, utilizando regedit.
Cree una entrada DWORD llamada DisableServerHeader en la siguiente clave del Registro y establezca el valor en 1.
HKLM \ SYSTEM \ CurrentControlSet \ Services \ HTTP \ Parámetros
Prefiero encontrar una solución adecuada usando Web.config, pero usarlo <rewrite>
no es bueno porque requiere que se instale el módulo de reescritura, e incluso así realmente no eliminará el encabezado, solo vacíelo.
Puede cambiar cualquier encabezado o cualquier cosa en Application_EndRequest()
probar esto
protected void Application_EndRequest()
{
// removing excessive headers. They don't need to see this.
Response.Headers.Remove("header_name");
}
El encabezado X-Powered-By es agregado por IIS a la respuesta HTTP, por lo que puede eliminarlo incluso a nivel del servidor a través del Administrador IIS:
Puede usar web.config directamente:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>