¿Hay alguna forma de eliminar el encabezado de respuesta "Servidor" de IIS7? Hay algunos artículos que muestran que usando HttpModules podemos lograr lo mismo. Esto será útil si no tenemos derechos de administrador en el servidor. Además, no quiero escribir un filtro ISAPI.
Tengo derechos de administrador en mi servidor. Entonces no quiero hacer las cosas anteriores. Entonces, ayúdame a hacer lo mismo.
Respuestas:
Agregue esto a su global.asax.cs:
fuente
NullReferenceException
en Cassini si confía enHttpContext.Current
. Esta publicación de blog muestra cómo hacerlo sin romper el soporte de Cassini, si eso es importante para usted.PreSendRequestHeaders
en una clase que implementeIHttpModule
oGlobal.asax
. He sido testigo del evento que congela la aplicación en el servidor bajo carga de estrés. losBeginRequest
evento debería funcionar para realizar cambios en el encabezado de respuesta. Consulte hanselman.com/blog/ChecklistWhatNOTToDoInASPNET.aspx .En IIS7 tienes que usar un módulo HTTP. Cree lo siguiente como biblioteca de clases en VS:
Luego 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).
fuente
HttpApplication
, laHttpRequest
, laHttpContext
, y elHttpResponse
no sonnull
, así como la comprobación de queHttpRequest.IsLocal
esfalse
.PreSendRequestHeaders
podría causar problemas con HttpCacheModule , debería usar algo comoPostReleaseRequestState
.Con el módulo de reescritura de URL versión 2.0 para IIS (UrlRewrite) habilitado, en la sección de configuración
<configuration>
➡<system.webServer>
➡<rewrite>
agregue la regla de salida:fuente
rewrite
nodosystem.webServer
. Tenga cuidado, esto bloqueará su sitio si UrlRewrite no está instalado en el servidor. Y es mejor que primero use la consola de configuración de IIS para verificar cómo escribe esos nodos de configuración.Scott Mitchell proporciona en una publicación de blog soluciones para eliminar encabezados innecesarios .
Como ya se dijo aquí en otras respuestas, para el
Server
encabezado, existe la solución del módulo http , o una solución web.config para IIS 10+ , o puede usar URLRewrite en su lugar para borrarlo .La solución más práctica para una configuración actualizada (IIS 10 +) es usar
removeServerHeader
en web.config:Para
X-AspNet-Version
yX-AspNetMvc-Version
, proporciona una mejor manera que eliminarlos en cada respuesta: simplemente no generarlos en absoluto.Úselo
enableVersionHeader
para deshabilitarX-AspNet-Version
, en web.configUsar
MvcHandler.DisableMvcResponseHeader
en el evento .Net Application_Start para deshabilitarX-AspNetMvc-Version
Y finalmente, elimine en la configuración de IIS el
X-Powered-By
encabezado personalizado en web.config.Tenga cuidado, si tiene ARR (Application Request Routing), también agregará el suyo propio
X-Powered-By
, que no se eliminará mediante la configuración de encabezados personalizados. Este tiene que ser eliminado a través del Administrador de IIS, configuración del Editor en la raíz de IIS (no en un sitio): vaya alsystem.webServer/proxy
nodo y establezcaarrResponseHeader
enfalse
. Después de unaIISReset
, se tiene en cuenta.(He encontrado este aquí , excepto que esta publicación trata sobre la antigua forma de configurar las cosas de IIS 6.0).
No olvide que la solución por código de aplicación no se aplica de forma predeterminada al encabezado generado en contenido estático (puede activar el
runAllManagedModulesForAllRequests
para cambiar eso, pero hace que todas las solicitudes se ejecuten en la tubería .Net). No es un problemaX-AspNetMvc-Version
ya que no se agrega en contenido estático (al menos si las solicitudes estáticas no se ejecutan en la canalización .Net).Nota al margen: cuando el objetivo es ocultar la tecnología utilizada, también debe cambiar los nombres de las cookies .Net estándar (
.ASPXAUTH
si los formularios están activados (use elname
atributo en laforms
etiqueta en web.config),ASP.NET_SessionId
(use<sessionState cookieName="yourName" />
en web.config debajo de lasystem.web
etiqueta),__RequestVerificationToken
(cámbielo por código conAntiForgeryConfig.CookieName
, pero desafortunadamente no se aplica a la entrada oculta que este sistema genera en el html)).fuente
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 pasan por alto esto.
La configuración del registro que se muestra tampoco funciona. URLScan es la ÚNICA forma de eliminar el encabezado "servidor" (al menos en IIS 7.5).
fuente
O agregue web.config:
fuente
X-AspNet-Version
yX-AspNetMvc-Version
cabecera. Lo que sé es que de esta manera no siempre funciona (si es que alguna vez funciona). Consulte la respuesta de @Frederic para obtener una forma más confiable de eliminarlos.Esta
web.config
configuración funciona para eliminar todos los encabezados innecesarios de la respuesta ASP.NET (al menos a partir de IIS 10):Tenga en cuenta que esto oculta todos los encabezados de la "aplicación", al igual que todos los demás enfoques. Si, por ejemplo, llega a alguna página predeterminada o una página de error generada por el propio IIS o ASP.NET fuera de su aplicación, estas reglas no se aplicarán. Entonces, idealmente, deberían estar en el nivel raíz en IIS y ese umbral puede dejar algunas respuestas de error en el propio IIS.
PD: Hay un error en IIS 10 que hace que a veces muestre el encabezado del servidor incluso con la configuración correcta. Ya debería estar arreglado, pero IIS / Windows tiene que actualizarse.
fuente
Además de la respuesta de reescritura de URL , aquí está el XML completo para
web.config
Reescritura de URL
fuente
Para eliminar el
Server:
encabezado, vaya aGlobal.asax
, busque / cree elApplication_PreSendRequestHeaders
evento y agregue una línea de la siguiente manera (gracias a BK y este blog, esto tampoco fallará en Cassini / desarrollador local):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 deshabilitar estos encabezados sin usar HttpModules o URLScan.
fuente
Si solo desea eliminar el encabezado, puede usar una versión abreviada de la respuesta de lukiffer:
Y luego en
Web.config
:fuente
Intente configurar la
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\DisableServerHeader
entrada del registro en unaREG_DWORD
de1
.fuente
OnPreSendRequestHeaders
controlador de eventos (ver arriba) nunca se activa, por alguna razón.UrlScan también puede eliminar el encabezado del servidor usando
AlternateServerName=
under[options]
.fuente
Siguiendo la respuesta de eddiegroves , dependiendo de la versión de URLScan, es posible que prefiera
RemoveServerHeader=1
debajo[options]
.No estoy seguro en qué versión de URLScan se agregó esta opción, pero ha estado disponible en la versión 2.5 y posteriores.
fuente
Encontré un artículo que explica por qué necesitamos editar el Registro y usar una herramienta como UrlScan para configurar esto en IIS correctamente. 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 hace el cambio de registro, durante el tiempo que esté deteniendo World Wide Publishing Service, su servidor devolverá la respuesta http del servidor desde el archivo HTTP.sys. Además, aquí hay errores comunes de usar la herramienta UrlScan: http://msdn.microsoft.com/en-us/library/ff648552.aspx#ht_urlscan_008
fuente
En IIS 10, usamos una solución similar al enfoque de Drew, es decir:
Y, obviamente, agregue una referencia a ese dll en su proyecto (s) y también el módulo en la configuración que desea:
NOTA IMPORTANTE 1: Esta solución necesita un grupo de aplicaciones integrado;
NOTA IMPORTANTE 2: Todas las respuestas dentro de la aplicación web se verán afectadas por esto (css y js incluidos);
fuente
Había investigado esto y el método URLRewrite funciona bien. Parece que no puedo encontrar bien el cambio escrito en ningún sitio. Escribí esto compatible con PowerShell v2 y superior y lo probé en IIS 7.5.
fuente
Puede agregar el siguiente código en el archivo Global.asax.cs
fuente
La solución propuesta anteriormente en combinación funcionó para mí con los siguientes cambios. Aquí estoy publicando mi escenario y solución.
Para mí, quería eliminar los siguientes encabezados:
Agregué estos a mi global.asax:
El evento anterior no se activó, por lo que agregué lo siguiente a web.config y luego funcionó.
y para eliminar el encabezado de la versión, también agregué lo siguiente a web.config:
Cambios en web.config:
¡Espero eso ayude!
fuente
Probé 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 de configuración. Si no lo hace y el archivo está en su caché local, se lo devolverá con los encabezados originales (duh).
Lo conseguí en su mayoría funcionando eliminando runAllManagedModulesForAllRequests:
Esto eliminó los encabezados extraños de la mayoría de los archivos estáticos, pero todavía estaba obteniendo el encabezado "Servidor" en algunos archivos estáticos en mi proyecto WebAPI en swagger.
Finalmente encontré y apliqué esta solución y ahora todo los encabezados no deseados se han ido:
https://www.dionach.com/blog/easily-remove-unwanted-http-headers-in-iis-70-to-85
que analiza 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. Puede eliminar el encabezado del servidor, no solo borrar el valor. De forma predeterminada, elimina:
fuente
IIS 7.5 y posiblemente versiones más recientes tienen el texto del encabezado almacenado en
iiscore.dll
Usando un editor hexadecimal, busque la cadena y la palabra "Servidor"
53 65 72 76 65 72
después de ella y reemplácelas con bytes nulos. En IIS 7.5 se ve así:A diferencia de otros métodos, esto no da como resultado una penalización del rendimiento. El encabezado también se elimina de todas las solicitudes, incluso de los errores internos.
fuente