Partilhar via


Middleware de cabeçalhos encaminhados ignora 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 estão explicitamente configurados como confiáveis. Essa alteração foi feita para proteção de segurança, já que as listas de proxy e IP não estavam sendo aplicadas em todos os casos.

Versão introduzida

ASP.NET Núcleo 8.0.17 ASP.NET Núcleo 9.0.6

Comportamento anterior

Anteriormente, o middleware, quando não configurado para usar X-Forwarded-For, processado X-Forwarded-PrefixX-Forwarded-Protoe X-Forwarded-Host cabeçalhos de qualquer fonte. Esse comportamento potencialmente permitiu que proxies/clientes mal-intencionados ou mal configurados falsificassem esses cabeçalhos e afetassem a compreensão das informações do cliente por um aplicativo.

Novo comportamento

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

Observação

Se sua implantação dependia de cabeçalhos encaminhados de proxies não configurados na lista de proxy confiável do seu aplicativo, esses cabeçalhos não seriam mais honrados.

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. Ele também pode fazer com que a autenticação falhe se você estiver usando a terminação TLS e esperando uma solicitação HTTPS.

Tipo de mudança disruptiva

Esta mudança é uma mudança comportamental.

Motivo da mudança

A mudança foi feita para o fortalecimento da segurança, já que as listas de proxy e IP não estavam sendo aplicadas em todos os casos.

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

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 desejar habilitar o comportamento anterior, que não é recomendado devido a riscos de segurança, você pode fazê-lo limpando as KnownNetworks listas e KnownProxies para ForwardedHeadersOptions 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, que limpa as listas e habilita ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProtoo .

Para aplicativos destinados ao .NET 9 ou anterior, você pode definir a Microsoft.AspNetCore.HttpOverrides.IgnoreUnknownProxiesWithoutFor opção AppContext para "true" ou 1 para voltar 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 de proxy podem mudar ao longo da vida útil do aplicativo e ASPNETCORE_FORWARDEDHEADERS_ENABLED , às vezes, são usados para fazer com que os cabeçalhos encaminhados funcionem.

APIs afetadas

Consulte também