HttpClient EventSource イベントでの URI クエリとフラグメントの再処理

.NET 9 では、HttpClientおよびSocketsHttpHandlerによって生成されるEventSource イベントの既定の動作 (EventSource名: System.Net.Http) が変更され、URI のクエリ、ユーザー情報、フラグメント部分がスクラブされました。 この変更により、クエリ文字列に含まれる可能性のある機密情報のログ記録を防ぎ、編集のパフォーマンス コストを最小限に抑えることで、プライバシーが強化されます。 必要に応じて、この動作をオーバーライドできます。

導入されたバージョン

.NET 9 Preview 7

以前の動作

以前は、 HttpClient および SocketsHttpHandler によって生成されたイベントにはクエリ文字列情報が含まれていました。これは、誤って機密情報を公開する可能性があります。

新しい動作

dotnet/runtime#104741 の変更により、クエリ パーツは*文字に置き換えられ、ユーザー情報とフラグメント部分は既定でHttpClientおよびSocketsHttpHandlerイベントで削除されます。 この変更は、pathAndQuery での RequestStartredirectUriでの Redirect など、特定のイベントとパラメーターに影響します。

破壊的変更の種類

この変更は、動作変更です。

変更理由

この変更の主な理由は、機密情報が誤ってログに記録されるリスクを減らすことでプライバシーを強化することでした。 多くの場合、クエリ文字列には機密データが含まれており、既定でログから編集すると、この情報が保護されます。 実装をシンプルかつ効率的に保つために、ユーザー情報とフラグメント部分もスクラブされます。

HttpClientまたはSocketsHttpHandlerイベントを使用するときにクエリ文字列情報が必要で、安全であると確信できる場合は、3 つの方法のいずれかで AppContext スイッチを設定することで、URI の再アクションをグローバルに無効にすることができます。 スイッチは再編集をスキップするため、クエリ、ユーザー情報、フラグメント部分を含む URI が as-is報告されます。

  • プロジェクト ファイルで。

    <ItemGroup>
      <RuntimeHostConfigurationOption Include="System.Net.Http.DisableUriRedaction" Value="true" />
    </ItemGroup>
    
  • runtimeconfig.json ファイルで。

    {
        "runtimeOptions": {
            "configProperties": {
                "System.Net.Http.DisableUriRedaction": true
            }
        }
    }
    
  • 環境変数を利用して。

    DOTNET_SYSTEM_NET_HTTP_DISABLEURIREDACTIONtrue または 1 に設定します。

それ以外の場合は、アクションは必要ありません。既定の動作は、アプリケーションのプライバシーの側面を強化するのに役立ちます。

このスイッチは、既定の IHttpClientFactory ログの URI の編集もスキップします。 詳細については、IHttpClientFactory ログ URI クエリの編集を参照してください。

影響を受ける API