Protokolování HttpClientFactory ve výchozím nastavení aktualizuje hodnoty hlaviček.
HttpClientFactory
Výchozí protokolování zahrnuje protokoly úrovně -level, které vypíše Trace
vš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á RedactLoggedHeaders
s , 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é.
Doporučená akce
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));