Sdílet prostřednictvím


Protokolování HttpClientFactory ve výchozím nastavení aktualizuje hodnoty hlaviček.

HttpClientFactoryVýchozí protokolování zahrnuje protokoly úrovně -level, které vypíše Tracevšechny hlavičky požadavků a odpovědí. Metoda RedactLoggedHeaders umožňuje určit, která z těchto hlaviček jsou citlivá. Hodnoty těchto hlaviček nejsou zaprotokolovány (názvy záhlaví zůstanou, ale hodnoty jsou nahrazeny *). Pokud nebyla dříve zadána žádná z hlaviček jako citlivá RedactLoggedHeaderss , všechny hlavičky byly považovány za necitlivý a byly zaprotokolovány se všemi jejich hodnotami tak, jak je. Počínaje rozhraním .NET 9, pokud není zadáno, považují se všechny hlavičky za citlivé a všechny hodnoty jsou ve výchozím nastavení upraveny.

Předchozí chování

Dříve, pokud RedactLoggedHeaders nebyla volána, byly všechny hlavičky protokolovány tak, jak jsou. Pokud RedactLoggedHeaders byla volána, zadané hlavičky byly znovu upraveny a další hlavičky byly protokolovány tak, jak jsou.

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) Výchozí – neuskutečněno

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 with predikate

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

(3) Redacted with collection

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

Nové chování

Počínaje rozhraním .NET 9, pokud RedactLoggedHeaders není volána, jsou všechny hlavičky znovu upraveny. Pokud RedactLoggedHeaders je volána, zadané hlavičky jsou redactovány.

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) Výchozí – všechny jsou upraveny.

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

Zavedená verze

.NET 9 RC 1

Typ zásadní změny

Tato změna je změna chování.

Důvod změny

Pokud záhlaví nejsou zadaná jako citlivá, můžou se citlivé informace vystavit v protokolech. Díky této změně je protokolování ve výchozím nastavení bezpečné.

Pokud chcete hlavičky protokolovat, vyhodnoťte, které hlavičky můžou obsahovat citlivé informace, a explicitně je zadejte pomocí RedactLoggedHeaders rozhraní API. Hlavičky můžete redactovat pro jednotlivé klienty nebo globálně pro všechny klienty pomocí nástroje ConfigureHttpClientDefaults(IServiceCollection, Action<IHttpClientBuilder>).

Zvažte použití přístupu typu "seznam povolených" místo přístupu typu block-list.

Pokud se důrazně domníváte, že žádná hlavička nemůže obsahovat citlivé informace nebo pro účely interního ladění, můžete redakci úplně zakázat předáním delegáta, který vrátí 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));

Ovlivněná rozhraní API