Compartir a través de


Middleware de encabezados reenviados omite los encabezados X-Forwarded-* de servidores proxy desconocidos

A partir de ASP.NET Core 8.0.17 y 9.0.6, el middleware encabezados reenviados omite todos los X-Forwarded-* encabezados de servidores proxy que no están configurados explícitamente como de confianza. Este cambio se realizó para la protección de la seguridad, ya que las listas de direcciones IP y proxy no se aplicaron en todos los casos.

Versión introducida

ASP.NET Core 8.0.17 ASP.NET Core 9.0.6

Comportamiento anterior

Anteriormente, el middleware, cuando no está configurado para usar X-Forwarded-Forencabezados , procesados X-Forwarded-PrefixX-Forwarded-Protoy X-Forwarded-Host de cualquier origen. Ese comportamiento permitía potencialmente que los servidores proxy o clientes malintencionados o mal configurados suplantasen estos encabezados y afectan a la comprensión de la información de cliente de una aplicación.

Nuevo comportamiento

A partir de versiones de mantenimiento de .NET 8 y .NET 9, solo se procesan los encabezados enviados por servidores proxy conocidos y de confianza (como configurados a través ForwardedHeadersOptions.KnownProxies de y ForwardedHeadersOptions.KnownNetworks). Los encabezados de orígenes desconocidos se omiten.

Nota:

Si la implementación dependía de encabezados reenviados de servidores proxy no configurados en la lista de proxy de confianza de la aplicación, esos encabezados ya no se respetan.

Este cambio puede provocar un comportamiento como redirecciones infinitas si usa el middleware de redirección HTTPS y usa la terminación TLS en el proxy. También puede provocar un error en la autenticación si usa la terminación TLS y espera una solicitud HTTPS.

Tipo de cambio disruptivo

Este cambio es un cambio de comportamiento.

Motivo del cambio

El cambio se realizó para la protección de la seguridad, ya que las listas de proxy e IP no se aplicaron en todos los casos.

Revise la topología de implementación. Asegúrese de que todos los servidores proxy legítimos delante de la aplicación se agreguen correctamente a KnownProxies o KnownNetworks en la ForwardedHeadersOptions configuración.

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    KnownProxies = { IPAddress.Parse("YOUR_PROXY_IP") }
});

O bien, para una red:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    KnownNetworks = { new IPNetwork(IPAddress.Parse("YOUR_NETWORK_IP"), PREFIX_LENGTH) }
});

Si desea habilitar el comportamiento anterior, que no se recomienda debido a riesgos de seguridad, puede hacerlo borrando las KnownNetworks listas KnownProxies y ForwardedHeadersOptions para permitir que cualquier proxy o red reenvíe estos encabezados.

También puede establecer la ASPNETCORE_FORWARDEDHEADERS_ENABLED variable truede entorno en , que borra las listas y habilita ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto.

En el caso de las aplicaciones que tienen como destino .NET 9 o versiones anteriores, puede establecer el Microsoft.AspNetCore.HttpOverrides.IgnoreUnknownProxiesWithoutFor modificador AppContext en "true" o 1 para volver al comportamiento anterior. Como alternativa, establezca la variable de MICROSOFT_ASPNETCORE_HTTPOVERRIDES_IGNORE_UNKNOWN_PROXIES_WITHOUT_FOR entorno.

Nota:

En entornos en la nube, las direcciones IP de proxy pueden cambiar durante la vigencia de la aplicación y ASPNETCORE_FORWARDEDHEADERS_ENABLED , a veces, se usan para hacer que los encabezados reenviados funcionen.

Las APIs afectadas

Consulte también