Compartilhar via


O Middleware de Cabeçalhos Encaminhados ignora os cabeçalhos X-Forwarded-* de proxies desconhecidos.

A partir do ASP.NET Core 8.0.17 e 9.0.6, o Middleware de cabeçalhos encaminhados ignora todos os X-Forwarded-* cabeçalhos de proxies que não são configurados explicitamente como confiáveis. Essa alteração foi feita para proteção de segurança, pois as listas de proxy e IP não estavam sendo aplicadas em todos os casos.

Versão introduzida

ASP.NET Core 8.0.17 ASP.NET Core 9.0.6

Comportamento anterior

Anteriormente, o middleware, quando não configurado para usar X-Forwarded-For, processava os X-Forwarded-Prefix, X-Forwarded-Proto e X-Forwarded-Host cabeçalhos de qualquer origem. Esse comportamento potencialmente permitiu que proxies/clientes mal-intencionados ou mal configurados falsificassem esses cabeçalhos e afetassem o entendimento de um aplicativo sobre as informações do cliente.

Novo comportamento

A partir das versões de manutenção do .NET 8 e do .NET 9, somente os cabeçalhos enviados por proxies confiáveis conhecidos (conforme configurado via ForwardedHeadersOptions.KnownProxies e ForwardedHeadersOptions.KnownNetworks) são processados. Cabeçalhos de fontes desconhecidas são ignorados.

Observação

Se a implantação depender de cabeçalhos encaminhados de proxies que não estão configurados na lista de proxies confiáveis do seu aplicativo, esses cabeçalhos não serão mais aceitos.

Essa alteração pode causar comportamentos como redirecionamentos infinitos se você estiver usando o middleware de redirecionamento HTTPS e usando a terminação TLS em seu proxy. Isso também pode fazer com que a autenticação falhe se você estiver usando o encerramento do TLS e esperando uma solicitação HTTPS.

Tipo de mudança disruptiva

Essa alteração é uma mudança comportamental.

Motivo da alteração

A alteração foi feita para proteção de segurança, pois as listas de proxy e IP não estavam sendo aplicadas em todos os casos.

Examine a topologia de implantação. Certifique-se de que todos os servidores proxy legítimos à frente do seu aplicativo sejam corretamente adicionados a KnownProxies ou KnownNetworks na configuração de ForwardedHeadersOptions.

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

Ou, para uma rede:

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

Se você deseja habilitar o comportamento anterior, o que não é recomendado devido a riscos de segurança, você pode fazer isso limpando as listas de KnownNetworks e KnownProxies em ForwardedHeadersOptions para permitir que qualquer proxy ou rede encaminhe esses cabeçalhos.

Você também pode definir a ASPNETCORE_FORWARDEDHEADERS_ENABLED variável de ambiente como true, o que limpa as listas e habilita ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto.

Para aplicativos direcionados ao .NET 9 ou anteriores, você pode definir o switch Microsoft.AspNetCore.HttpOverrides.IgnoreUnknownProxiesWithoutForAppContext para "true" ou 1 para retornar ao comportamento anterior. Como alternativa, defina a variável de MICROSOFT_ASPNETCORE_HTTPOVERRIDES_IGNORE_UNKNOWN_PROXIES_WITHOUT_FOR ambiente.

Observação

Em ambientes de nuvem, os IPs proxy podem mudar ao longo do tempo de vida do aplicativo e ASPNETCORE_FORWARDEDHEADERS_ENABLED , às vezes, são usados para fazer os cabeçalhos encaminhados funcionarem.

APIs afetadas

Consulte também