HttpClientFactory-logboekregistratie voert standaard headerwaarden opnieuw uit
HttpClientFactory
De standaardlogboekregistratie bevat Trace
logboeken op niveau die alle aanvraag- en antwoordheaders uitvoeren. Met de RedactLoggedHeaders methode kunt u opgeven welke van deze headers gevoelig zijn. De waarden van deze headers worden niet vastgelegd (de headernamen blijven behouden, maar de waarden worden vervangen door *
). Als voorheen geen van de headers als gevoelig RedactLoggedHeaders
werd opgegeven, werden alle headers beschouwd als niet-gevoelig en werden ze geregistreerd met alle bijbehorende waarden. Vanaf .NET 9 worden alle headers in plaats daarvan beschouwd als gevoelig en worden alle waarden standaard opnieuw uitgevoerd.
Vorig gedrag
RedactLoggedHeaders Voorheen werden alle headers vastgelegd als ze niet werden aangeroepen. Als RedactLoggedHeaders
dit werd aangeroepen, werden de opgegeven headers redacted en werden andere headers geregistreerd als is.
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) Standaard, niet redacted
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 predicaat
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
Nieuw gedrag
Vanaf .NET 9 worden alle headers redacted als RedactLoggedHeaders deze niet wordt aangeroepen. Als RedactLoggedHeaders
deze wordt aangeroepen, worden de opgegeven headers opnieuw uitgevoerd.
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) Standaard: alle worden redacted
trce: System.Net.Http.HttpClient.default.ClientHandler[102]
Request Headers:
Authorization: *
X-Sensitive: *
X-Other: *
Cache-Control: *
Versie geïntroduceerd
.NET 9 RC 1
Type wijziging die fouten veroorzaken
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Als headers niet als gevoelig worden opgegeven, kunnen gevoelige informatie worden weergegeven in logboeken. Door deze wijziging is de logboekregistratie standaard veilig.
Aanbevolen actie
Als u de headers wilt registreren, moet u beoordelen welke headers gevoelige informatie kunnen bevatten en deze expliciet opgeven met behulp van de RedactLoggedHeaders
API. U kunt headers per client of globaal voor alle clients redacteren met behulp van de ConfigureHttpClientDefaults(IServiceCollection, Action<IHttpClientBuilder>).
Overweeg om een 'acceptatielijst'-benadering te gebruiken in plaats van een 'bloklijst'-benadering.
Als u ervan overtuigd bent dat geen van uw headers gevoelige informatie kan bevatten of voor interne foutopsporingsdoeleinden, kunt u de redaction volledig uitschakelen door een gemachtigde door te geven die wordt geretourneerd 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));