Rejestrowanie httpClientFactory domyślnie redacts wartości nagłówka
HttpClientFactory
Domyślne rejestrowanie obejmuje Trace
dzienniki 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.
Zalecana akcja
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));