다음을 통해 공유


전달된 헤더 미들웨어는 알 수 없는 프록시에서 X-Forwarded-* 헤더를 무시합니다.

ASP.NET Core 8.0.17 및 9.0.6부터 전달된 헤더 미들웨어는 명시적으로 신뢰할 수 있는 것으로 구성되지 않은 프록시의 모든 X-Forwarded-* 헤더를 무시합니다. 프록시 및 IP 목록이 모든 경우에 적용되지 않았기 때문에 보안 강화를 위해 이 변경이 수행되었습니다.

도입된 버전

ASP.NET Core 8.0.17 ASP.NET Core 9.0.6

이전 동작

이전에는 미들웨어가 X-Forwarded-For를 사용하도록 구성되지 않은 경우, 모든 원본의 X-Forwarded-Prefix, X-Forwarded-Proto, 및 X-Forwarded-Host 헤더를 처리했습니다. 이 동작으로 악의적이거나 잘못 구성된 프록시/클라이언트가 이러한 헤더를 스푸핑하고 애플리케이션의 클라이언트 정보 이해에 영향을 줄 수 있습니다.

새 동작

.NET 8 및 .NET 9의 서비스 릴리스에서는 ForwardedHeadersOptions.KnownProxiesForwardedHeadersOptions.KnownNetworks로 구성된, 신뢰할 수 있는 프록시에서 보낸 헤더만 처리됩니다. 알 수 없는 원본의 헤더는 무시됩니다.

비고

배포가 애플리케이션의 신뢰할 수 있는 프록시 목록에 구성되지 않은 프록시의 전달된 헤더에 의존하는 경우 해당 헤더는 더 이상 적용되지 않습니다.

이 변경으로 인해 HTTPS 리디렉션 미들웨어를 사용하고 프록시에서 TLS 종료를 사용하는 경우 무한 리디렉션과 같은 동작이 발생할 수 있습니다. 또한 TLS 종료를 사용하고 HTTPS 요청을 예상하는 경우 인증이 실패할 수 있습니다.

파괴적 변경 유형

이 변경은 동작 변경입니다.

변경 이유

프록시 및 IP 목록이 모든 경우에 적용되지 않았기 때문에 보안 강화를 위해 변경되었습니다.

배포 토폴로지 검토 앱 앞에 있는 모든 합법적인 프록시 서버가 KnownProxies 구성의 KnownNetworks 또는 ForwardedHeadersOptions에 올바르게 추가되었는지 확인하십시오.

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

또는 네트워크의 경우 다음을 수행합니다.

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

보안 위험 때문에 권장되지 않는 이전 동작을 사용하려면, KnownNetworksKnownProxies 목록을 ForwardedHeadersOptions에서 지워서 프록시나 네트워크가 이러한 헤더를 전달할 수 있도록 설정할 수 있습니다.

또한 ASPNETCORE_FORWARDEDHEADERS_ENABLED 환경 변수를 true로 설정하면 목록을 지우고 ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto를 활성화할 수 있습니다.

.NET 9 이하를 대상으로 하는 애플리케이션의 경우 Microsoft.AspNetCore.HttpOverrides.IgnoreUnknownProxiesWithoutFor 스위치를 또는 "true"로 설정하여 이전 동작으로 되돌릴 수 있습니다. 또는 환경 변수를 MICROSOFT_ASPNETCORE_HTTPOVERRIDES_IGNORE_UNKNOWN_PROXIES_WITHOUT_FOR 설정합니다.

비고

클라우드 환경에서 프록시 IP는 앱의 수명 동안 변경될 수 있으며 ASPNETCORE_FORWARDEDHEADERS_ENABLED 전달된 헤더가 작동하도록 하는 데 사용되는 경우도 있습니다.

영향을 받는 API

참고하십시오