Udostępnij za pośrednictwem


Rejestrowanie httpClientFactory domyślnie redacts wartości nagłówka

HttpClientFactoryDomyślne rejestrowanie obejmuje Tracedzienniki na poziomie , które wyświetlają wszystkie nagłówki żądań i odpowiedzi. Metoda RedactLoggedHeaders umożliwia określenie, które z tych nagłówków są poufne. Wartości tych nagłówków nie są rejestrowane (nazwy nagłówków pozostają, ale wartości są zastępowane ciągiem *). Wcześniej, jeśli żaden z nagłówków nie został określony jako poufny z RedactLoggedHeaders, wszystkie nagłówki zostały uznane za niewrażliwe i zostały zarejestrowane ze wszystkimi ich wartościami zgodnie z rzeczywistymi wartościami. Począwszy od platformy .NET 9, chyba że określono, wszystkie nagłówki są traktowane jako poufne, a wszystkie wartości są domyślnie redagowane.

Poprzednie zachowanie

Wcześniej, jeśli RedactLoggedHeaders nie został wywołany, wszystkie nagłówki zostały zarejestrowane zgodnie z rzeczywistym użyciem. Jeśli RedactLoggedHeaders został wywołany, określone nagłówki zostały zredagowane, a inne nagłówki zostały zarejestrowane zgodnie z rzeczywistym użyciem.

services.AddHttpClient("default", ...); // 1

services.AddHttpClient("redacted-predicate", ...) // 2
    .RedactLoggedHeaders(h => h.StartsWith("Auth") || h.StartsWith("X-"));

services.AddHttpClient("redacted-collection", ...) // 3
    .RedactLoggedHeaders(new[] { "Authorization", "X-Sensitive", });

(1) Ustawienie domyślne — niezredagowane

trce: System.Net.Http.HttpClient.default.ClientHandler[102]
      Request Headers:
      Authorization: NTLM blob
      X-Sensitive: some, secret, values
      X-Other: some, other, values
      Cache-Control: no-cache

(2) Redacted z predykatem

trce: System.Net.Http.HttpClient.redacted-predicate.ClientHandler[102]
      Request Headers:
      Authorization: *
      X-Sensitive: *
      X-Other: *
      Cache-Control: no-cache

(3) Redacted with collection (Redacted with collection) (Redacted with collection )(3) Redact

trce: System.Net.Http.HttpClient.redacted-collection.ClientHandler[102]
      Request Headers:
      Authorization: *
      X-Sensitive: *
      X-Other: some, other, values
      Cache-Control: no-cache

Nowe zachowanie

Począwszy od platformy .NET 9, jeśli RedactLoggedHeaders nie jest wywoływana, wszystkie nagłówki są redagowane. Jeśli RedactLoggedHeaders jest wywoływana, określone nagłówki są redagowane.

services.AddHttpClient("default", ...); // 1 <--- CHANGED

services.AddHttpClient("redacted-predicate", ...) // 2 <--- remains the same
    .RedactLoggedHeaders(h => h.StartsWith("Auth") || h.StartsWith("X-"));

services.AddHttpClient("redacted-collection", ...) // 3 <--- remains the same
    .RedactLoggedHeaders(new[] { "Authorization", "X-Sensitive", });

(1) Ustawienie domyślne — wszystkie są redagowane

trce: System.Net.Http.HttpClient.default.ClientHandler[102]
      Request Headers:
      Authorization: *
      X-Sensitive: *
      X-Other: *
      Cache-Control: *

Wprowadzona wersja

.NET 9 RC 1

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

Jeśli nagłówki nie są określone jako poufne, poufne informacje mogą być widoczne w dziennikach. Ta zmiana powoduje, że rejestrowanie jest bezpieczne domyślnie.

Jeśli chcesz rejestrować nagłówki, oceń, które nagłówki mogą zawierać poufne informacje i jawnie określić je przy użyciu interfejsu RedactLoggedHeaders API. Nagłówki można redact na klienta lub globalnie dla wszystkich klientów przy użyciu .ConfigureHttpClientDefaults(IServiceCollection, Action<IHttpClientBuilder>)

Rozważ użycie podejścia "allow-list", a nie podejścia "block-list".

Jeśli zdecydowanie uważasz, że żaden z nagłówków nie może zawierać poufnych informacji lub w celach debugowania wewnętrznego, możesz całkowicie wyłączyć redaction, przekazując delegata zwracającego polecenie false.

private static readonly string[] SafeToLogHeaders = ....;
private static readonly string[] SuperSecretHeaders = ....;

// Specify for all clients.
services.ConfigureHttpClientDefaults(b =>
    b.RedactLoggedHeaders(h =>
        Array.IndexOf(SafeToLogHeaders, h) == -1)); // log values only for SafeToLogHeaders

// "globally" specified RedactLoggedHeaders can be overriden per-name.
// NOTE: RedactLoggedHeaders completely replaces the previously specified check.
services.AddHttpClient("override")
    .RedactLoggedHeaders(SuperSecretHeaders); // log all values except SuperSecretHeaders

// -OR-

// (dangerous) Disable header value redaction for all clients.
services.ConfigureHttpClientDefaults(b => b.RedactLoggedHeaders(_ => false));

Dotyczy interfejsów API