Kwerenda identyfikatora URI i redaction fragmentu w zdarzeniach HttpClient EventSource

W .NET 9 domyślne zachowanie zdarzeń EventSource emitowanych przez HttpClient i SocketsHttpHandler (EventSource nazwa: System.Net.Http) zostało zmodyfikowane w celu oczyszczenia zapytania, informacji o użytkowniku i fragmentu części identyfikatora URI. Ta zmiana zwiększa prywatność, uniemożliwiając rejestrowanie potencjalnie poufnych informacji zawartych w ciągach zapytań przy jednoczesnym zachowaniu minimalnych kosztów wydajności operacji redaction. W razie potrzeby można zastąpić to zachowanie.

Wersja wprowadzona

.NET 9 (wersja zapoznawcza 7)

Poprzednie zachowanie

Wcześniej zdarzenia emitowane przez HttpClient i SocketsHttpHandler zawierały informacje z ciągu zapytania, co mogło nieumyślnie ujawniać poufne informacje.

Nowe zachowanie

Po zmianie w dotnet/runtime#104741 część zapytania jest zastępowana znakiem *, a części informacji o użytkowniku i fragmentu są domyślnie usuwane w zdarzeniach HttpClient i SocketsHttpHandler. Ta zmiana dotyczy określonych zdarzeń i parametrów, takich jak pathAndQuery w RequestStart i redirectUri w Redirect.

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

Główną przyczyną tej zmiany było zwiększenie prywatności poprzez zmniejszenie ryzyka niezamierzonego rejestrowania poufnych informacji. Parametry zapytania często zawierają poufne dane, a ich domyślne usuwanie z logów pomaga chronić te informacje. Aby zapewnić prostą i wydajną implementację, informacje o użytkowniku i części fragmentów są również czyszczone.

Jeśli podczas przetwarzania zdarzeń HttpClient lub SocketsHttpHandler potrzebujesz informacji o parametrach ciągu zapytania i masz pewność, że jest to bezpieczne, możesz globalnie wyłączyć redagowanie identyfikatorów URI, ustawiając przełącznik AppContext na jeden z trzech sposobów. Przełącznik pomija wszelkie maskowanie, dlatego identyfikatory URI są zgłaszane w niezmienionej postaci, łącznie z parametrami zapytania, informacjami o użytkowniku i fragmentem.

  • W pliku projektu.

    <ItemGroup>
      <RuntimeHostConfigurationOption Include="System.Net.Http.DisableUriRedaction" Value="true" />
    </ItemGroup>
    
  • W pliku runtimeconfig.json.

    {
        "runtimeOptions": {
            "configProperties": {
                "System.Net.Http.DisableUriRedaction": true
            }
        }
    }
    
  • Za pomocą zmiennej środowiskowej.

    Ustaw DOTNET_SYSTEM_NET_HTTP_DISABLEURIREDACTION na true lub 1.

W przeciwnym razie nie jest wymagana żadna akcja, a domyślne zachowanie pomoże zwiększyć aspekty prywatności aplikacji.

Uwaga

Ten przełącznik pomija również maskowanie identyfikatorów URI w domyślnych dziennikach IHttpClientFactory. Aby uzyskać więcej informacji, zobacz Ukrywanie zapytań URI w logach IHttpClientFactory.

Interfejsy API, których to dotyczy