varunm unwanted remove operating net microsoft headers disable deshabilitar asp security iis-7 header response

security - unwanted - Eliminar el encabezado de respuesta del servidor IIS7



remove server header iis (16)

¿Hay alguna forma de eliminar el encabezado de respuesta de "Servidor" de IIS7? Hay algunos artículos que muestran que usando HttpModules podemos lograr lo mismo. Esto será útil si no tenemos derecho de administrador al servidor. Además, no quiero escribir el filtro ISAPI.

Tengo derechos de administrador para mi servidor. Entonces no quiero hacer lo anterior. Por lo tanto, ayúdenme a hacer lo mismo.


Además de la respuesta de reescritura de URL , aquí está el XML completo para web.config

<system.webServer> <rewrite> <outboundRules> <rule name="Remove RESPONSE_Server" > <match serverVariable="RESPONSE_Server" pattern=".+" /> <action type="Rewrite" value="Company name" /> </rule> </outboundRules> </rewrite> </system.webServer>

Reescritura de URL


Agregue esto a su global.asax.cs:

protected void Application_PreSendRequestHeaders() { Response.Headers.Remove("Server"); Response.Headers.Remove("X-AspNet-Version"); Response.Headers.Remove("X-AspNetMvc-Version"); }


En IIS 10, utilizamos una solución similar al enfoque de Drew, es decir:

using System; using System.Web; namespace Common.Web.Modules.Http { /// <summary> /// Sets custom headers in all requests (e.g. "Server" header) or simply remove some. /// </summary> public class CustomHeaderModule : IHttpModule { public void Init(HttpApplication context) { context.PreSendRequestHeaders += OnPreSendRequestHeaders; } public void Dispose() { } /// <summary> /// Event handler that implements the desired behavior for the PreSendRequestHeaders event, /// that occurs just before ASP.NET sends HTTP headers to the client. /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void OnPreSendRequestHeaders(object sender, EventArgs e) { //HttpContext.Current.Response.Headers.Remove("Server"); HttpContext.Current.Response.Headers.Set("Server", "MyServer"); } } }

Y, obviamente, agregue una referencia a ese dll en su (s) proyecto (s) y también el módulo en la (s) configuración (es) que desee:

<system.webServer> <modules> <!--Use http module to remove/customize IIS "Server" header--> <add name="CustomHeaderModule" type="Common.Web.Modules.Http.CustomHeaderModule" /> </modules> </system.webServer>

NOTA IMPORTANTE1: esta solución necesita un grupo de aplicaciones como integrado;

NOTA IMPORTANTE2: Todas las respuestas dentro de la aplicación web se verán afectadas por esto (css y js incluidos);


En IIS7, debe usar un módulo HTTP. Cree lo siguiente como una biblioteca de clases en VS:

namespace StrongNamespace.HttpModules { public class CustomHeaderModule : IHttpModule { public void Init(HttpApplication context) { context.PreSendRequestHeaders += OnPreSendRequestHeaders; } public void Dispose() { } void OnPreSendRequestHeaders(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Set("Server", "Box of Bolts"); } } }

A continuación, agregue lo siguiente a su web.config, o configúrelo dentro de IIS (si configura dentro de IIS, el ensamblado debe estar en el GAC).

<configuration> <system.webServer> <modules> <add name="CustomHeaderModule" type="StrongNamespace.HttpModules.CustomHeaderModule" /> </modules> </system.webServer> </configuration>


En realidad, los módulos codificados y los ejemplos de Global.asax que se muestran arriba solo funcionan para solicitudes válidas.

Por ejemplo, agregue <al final de su URL y obtendrá una página de "Solicitud incorrecta" que aún expone el encabezado del servidor. Muchos desarrolladores lo pasan por alto.

La configuración de registro que se muestra tampoco funciona. URLScan es la ÚNICA manera de eliminar el encabezado "servidor" (al menos en IIS 7.5).


Encontré un artículo que explica por qué tenemos que hacer tanto la edición del Registro como usar una herramienta como UrlScan para configurar esto correctamente en IIS. Lo seguí en nuestros servidores y funciona: http://blogs.msdn.com/b/varunm/archive/2013/04/23/remove-unwanted-http-response-headers.aspx . Si solo usa UrlScan pero no realiza el cambio en el registro, durante el tiempo que está deteniendo el Servicio de publicación mundial, su servidor devolverá la respuesta HTTP del servidor del archivo HTTP.sys. Además, estos son los problemas comunes al usar la herramienta UrlScan: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008


Intenté todas las cosas aquí y en varios otros subprocesos de desbordamiento de pila similares.

Me colgué un poco porque olvidé borrar la caché de mi navegador después de hacer cambios en la configuración. Si no lo hace y el archivo está en su caché local, se lo devolverá con los encabezados originales (duh).

Lo hice principalmente trabajando eliminando runAllManagedModulesForAllRequests:

<modules runAllManagedModulesForAllRequests="true">

Esto eliminó los encabezados extraños de la mayoría de los archivos estáticos, pero todavía estaba recibiendo el encabezado "Servidor" en algunos archivos estáticos en mi proyecto WebAPI en swagger.

Finalmente encontré y apliqué esta solución y ahora todos los encabezados no deseados se han ido:

https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85

que discute su código que está aquí:

https://github.com/Dionach/StripHeaders/releases/tag/v1.0.5

Este es un módulo de código nativo. Es capaz de eliminar el encabezado del servidor, no solo borrar el valor. Por defecto, elimina:

  • Servidor
  • X-Powered-By
  • Versión X-Aspnet
  • Servidor: Microsoft-HTTPAPI / 2.0 - que se devolverá si "la solicitud no se pasa a IIS"

Intente establecer la entrada de registro HKLM/SYSTEM/CurrentControlSet/Services/HTTP/Parameters/DisableServerHeader en REG_DWORD de 1 .


Investigué esto y el método URLRewrite funciona bien. No parece poder encontrar bien el cambio en cualquier lugar. Escribí esto compatible con PowerShell v2 y superior y lo probé en IIS 7.5.

# Add Allowed Server Variable Add-WebConfiguration /system.webServer/rewrite/allowedServerVariables -atIndex 0 -value @{name="RESPONSE_SERVER"} # Rule Name $ruleName = "Remove Server Response Header" # Add outbound IIS Rewrite Rule Add-WebConfigurationProperty -pspath "iis:/" -filter "system.webServer/rewrite/outboundrules" -name "." -value @{name=$ruleName; stopProcessing=''False''} #Set Properties of newly created outbound rule Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -filter "system.webServer/rewrite/outboundRules/rule[@name=''$ruleName'']/match" -name "serverVariable" -value "RESPONSE_SERVER" Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -filter "system.webServer/rewrite/outboundRules/rule[@name=''$ruleName'']/match" -name "pattern" -value ".*" Set-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST" -filter "system.webServer/rewrite/outboundRules/rule[@name=''$ruleName'']/action" -name "type" -value "Rewrite"


O agregue en web.config:

<system.webServer> <httpProtocol> <customHeaders> <remove name="X-AspNet-Version" /> <remove name="X-AspNetMvc-Version" /> <remove name="X-Powered-By" /> <!-- <remove name="Server" /> this one doesn''t work --> </customHeaders> </httpProtocol> </system.webServer>


Para eliminar Server: header, vaya a Global.asax , busque / cree el evento Application_PreSendRequestHeaders y agregue una línea de la siguiente manera (gracias a BK y a este blog, esto tampoco fallará en el Cassini / local dev):

protected void Application_PreSendRequestHeaders(object sender, EventArgs e) { // Remove the "Server" HTTP Header from response HttpApplication app = sender as HttpApplication; if (null != app && null != app.Request && !app.Request.IsLocal && null != app.Context && null != app.Context.Response) { NameValueCollection headers = app.Context.Response.Headers; if (null != headers) { headers.Remove("Server"); } } }

Si desea una solución completa para eliminar todos los encabezados relacionados en Azure / IIS7 y también funciona con Cassini, consulte este enlace , que muestra la mejor manera de desactivar estos encabezados sin utilizar HttpModules o URLScan.


Scott Mitchell proporciona en un blog post soluciones para eliminar encabezados innecesarios .

Como ya dijimos aquí en otras respuestas, para el encabezado Server , está la solución del módulo http o el módulo UrlScan. (El módulo URLScan ya no está disponible en IIS7.5 +. Use URLRewrite para borrarlo ).

Para X-AspNet-Version y X-AspNetMvc-Version , proporciona una mejor manera de eliminarlos en cada respuesta: simplemente no generarlos en absoluto.

Use enableVersionHeader para deshabilitar X-AspNet-Version , en web.config

<httpRuntime enableVersionHeader="false" />

Use MvcHandler.DisableMvcResponseHeader en .Net Application_Start event para deshabilitar X-AspNetMvc-Version

MvcHandler.DisableMvcResponseHeader = true;

Y finalmente, elimine en la configuración de IIS el encabezado personalizado X-Powered-By .

No olvide que la solución por código de la aplicación no se aplica por defecto al encabezado generado en contenido estático (puede activar runAllManagedModulesForAllRequests para cambiar eso, pero provoca que todas las solicitudes ejecuten la canalización .Net). No es un problema para X-AspNetMvc-Version ya que no se agrega en contenido estático (al menos si la solicitud estática no se ejecuta en .Net pipeline).

Nota al .ASPXAUTH : cuando el objetivo es encubrir la tecnología utilizada, también debe cambiar los nombres de cookie .Net estándar ( .ASPXAUTH si se activa auth (se usa el atributo name en la etiqueta de forms en web.config), ASP.NET_SessionId (use <sessionState cookieName="yourName" /> en web.config bajo la etiqueta system.web ), __RequestVerificationToken (cámbielo por código con AntiForgeryConfig.CookieName , pero desafortunadamente no se aplica a la entrada oculta que este sistema genera en el html)).


Si solo desea eliminar el encabezado, puede usar una versión abreviada de la respuesta de lukiffer:

using System.Web; namespace Site { public sealed class HideServerHeaderModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.PreSendRequestHeaders += (sender, e) => HttpContext.Current.Response.Headers.Remove("Server"); } } }

Y luego en Web.config :

<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <add name="CustomHeaderModule" type="Site.HideServerHeaderModule" /> </modules> </system.webServer>


Siguiendo con share , dependiendo de la versión de URLScan, en su lugar puede preferir RemoveServerHeader=1 en [options] .

No estoy seguro de en qué versión de URLScan se agregó esta opción, pero ha estado disponible en la versión 2.5 y posterior.


use IIS UrlRewrite 2.0

<outboundRules> <rule name="Remove RESPONSE_Server" > <match serverVariable="RESPONSE_Server" pattern=".+" /> <action type="Rewrite" value="" /> </rule> </outboundRules>


UrlScan también puede eliminar el encabezado del servidor utilizando AlternateServerName= en [options] .