Dela via


Vidarebefordrade rubriker Mellanprogram ignorerar X-Vidarebefordrade-* huvuden från okända proxyservrar

Från och med ASP.NET Core 8.0.17 och 9.0.6 ignoreras alla X-Forwarded-* huvuden från proxyservrar som inte uttryckligen har konfigurerats som betrodda. Den här ändringen gjordes för säkerhetshärdning eftersom proxy- och IP-listorna inte tillämpades i alla fall.

Version lanserad

ASP.NET Core 8.0.17 ASP.NET Core 9.0.6

Tidigare beteende

Tidigare har mellanprogrammet inte konfigurerats för att använda X-Forwarded-For, bearbetat X-Forwarded-Prefix, X-Forwarded-Protooch X-Forwarded-Host rubriker från någon källa. Det beteendet kan tillåta skadliga eller felkonfigurerade proxyservrar/klienter att förfalska dessa huvuden och påverka ett programs förståelse av klientinformation.

Nytt beteende

Från och med .NET 8- och .NET 9-serviceversioner bearbetas endast huvuden som skickas av kända betrodda proxyservrar (som konfigurerats via ForwardedHeadersOptions.KnownProxies och ForwardedHeadersOptions.KnownNetworks). Huvuden från okända källor ignoreras.

Anmärkning

Om distributionen förlitade sig på vidarebefordrade huvuden från proxyservrar som inte har konfigurerats i programmets lista över betrodda proxyservrar respekteras inte längre dessa huvuden.

Den här ändringen kan orsaka beteende som oändliga omdirigeringar om du använder HTTPS-omdirigeringsmellanprogrammet och använder TLS-avslutning i proxyn. Det kan också leda till att autentiseringen misslyckas om du använder TLS-avslutning och förväntar dig en HTTPS-begäran.

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändring

Ändringen gjordes för säkerhetshärdning eftersom proxy- och IP-listorna inte tillämpades i alla fall.

Granska distributionstopologin. Se till att alla legitima proxyservrar framför din app läggs till KnownProxies korrekt i eller KnownNetworks i konfigurationen ForwardedHeadersOptions .

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

Eller för ett nätverk:

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

Om du vill aktivera det tidigare beteendet, vilket inte rekommenderas på grund av säkerhetsrisker, kan du göra det genom att rensa KnownNetworks listorna och KnownProxies i ForwardedHeadersOptions så att alla proxy- eller nätverk kan vidarebefordra dessa rubriker.

Du kan också ange ASPNETCORE_FORWARDEDHEADERS_ENABLED miljövariabeln till true, vilket rensar listorna och aktiverar ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto.

För program som riktar in sig på .NET 9 eller tidigare kan du ange Microsoft.AspNetCore.HttpOverrides.IgnoreUnknownProxiesWithoutFor till "true" eller 1 för att återgå till det tidigare beteendet. Du kan också ange MICROSOFT_ASPNETCORE_HTTPOVERRIDES_IGNORE_UNKNOWN_PROXIES_WITHOUT_FOR miljövariabeln.

Anmärkning

I molnmiljöer kan proxy-IP-adresser ändras under appens livslängd och ASPNETCORE_FORWARDEDHEADERS_ENABLED används ibland för att få vidarebefordrade huvuden att fungera.

Berörda API:er

Se även