次の方法で共有


Forwarded Headers Middleware は不明なプロキシからの X-Forwarded-* ヘッダーを無視します

ASP.NET Core 8.0.17 および 9.0.6 以降、Forwarded Headers Middleware は、明示的に信頼済みとして構成されていないプロキシからのすべての X-Forwarded-* ヘッダーを無視します。 この変更はセキュリティ強化のために行われました。プロキシと IP リストは、すべてのケースで適用されていませんでした。

導入されたバージョン

ASP.NET Core 8.0.17 ASP.NET Core 9.0.6

以前の動作

以前は、ミドルウェアは、 X-Forwarded-Forを使用するように構成されていない場合、任意のソースから処理された X-Forwarded-PrefixX-Forwarded-Proto、および X-Forwarded-Host ヘッダーです。 この動作により、悪意のあるプロキシまたは正しく構成されていないプロキシ/クライアントがこれらのヘッダーをスプーフィングし、アプリケーションによるクライアント情報の理解に影響を与える可能性があります。

新しい動作

.NET 8 および .NET 9 サービス リリース以降では、既知の信頼されたプロキシ ( ForwardedHeadersOptions.KnownProxies および ForwardedHeadersOptions.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) }
});

セキュリティリスクのために推奨されない以前の動作を有効にする場合は、KnownNetworksKnownProxiesForwardedHeadersOptionsリストをクリアして、プロキシまたはネットワークがこれらのヘッダーを転送できるようにします。

ASPNETCORE_FORWARDEDHEADERS_ENABLED環境変数を true に設定することもできます。これにより、リストがクリアされ、ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProtoが有効になります。

.NET 9 以前を対象とするアプリケーションの場合は、 Microsoft.AspNetCore.HttpOverrides.IgnoreUnknownProxiesWithoutForAppContext スイッチを "true" または 1 に設定して、前の動作に戻すことができます。 または、 MICROSOFT_ASPNETCORE_HTTPOVERRIDES_IGNORE_UNKNOWN_PROXIES_WITHOUT_FOR 環境変数を設定します。

クラウド環境では、プロキシ IP はアプリの有効期間中に変更される可能性があり、 ASPNETCORE_FORWARDEDHEADERS_ENABLED は転送されたヘッダーを機能させるために使用される場合があります。

影響を受ける API

こちらも参照ください