Delen via


HttpClientFactory-logboekregistratie voert standaard headerwaarden opnieuw uit

HttpClientFactoryDe standaardlogboekregistratie bevat Tracelogboeken 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 RedactLoggedHeaderswerd 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.

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));

Betrokken API's