HttpClientFactory 로깅은 기본적으로 헤더 값을 수정함
HttpClientFactory
의 기본 로깅에는 모든 요청 및 응답 헤더를 출력하는 Trace
수준 로그가 포함됩니다. 이 RedactLoggedHeaders 메서드를 사용하면 이러한 헤더 중 중요한 헤더를 지정할 수 있습니다. 이러한 헤더의 값은 기록되지 않습니다(헤더 이름은 그대로 유지되지만 값은 *
로 대체됨). 이전에는 RedactLoggedHeaders
를 사용하여 헤더 중 어느 것도 중요한 헤더로 지정하지 않으면, 모든 헤더가 중요하지 않은 것으로 간주되어 모든 값이 있는 그대로 기록되었습니다. .NET 9부터는 지정하지 않는 한 모든 헤더가 중요한 것으로 간주되며 모든 값이 기본적으로 수정됩니다.
이전 동작
이전에는 RedactLoggedHeaders를 호출하지 않은 경우 모든 헤더가 있는 그대로 기록되었습니다. RedactLoggedHeaders
를 호출한 경우 지정된 헤더가 수정되고 다른 헤더는 있는 그대로 기록되었습니다.
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) 기본 - 수정되지 않음
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) 조건자로 수정됨
trce: System.Net.Http.HttpClient.redacted-predicate.ClientHandler[102]
Request Headers:
Authorization: *
X-Sensitive: *
X-Other: *
Cache-Control: no-cache
(3) 컬렉션으로 수정됨
trce: System.Net.Http.HttpClient.redacted-collection.ClientHandler[102]
Request Headers:
Authorization: *
X-Sensitive: *
X-Other: some, other, values
Cache-Control: no-cache
새 동작
.NET 9부터는 RedactLoggedHeaders를 호출하지 않으면 모든 헤더가 수정됩니다. RedactLoggedHeaders
를 호출하면 지정된 헤더가 수정됩니다.
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) 기본 - 모두 수정됨
trce: System.Net.Http.HttpClient.default.ClientHandler[102]
Request Headers:
Authorization: *
X-Sensitive: *
X-Other: *
Cache-Control: *
도입된 버전
.NET 9 RC 1
호환성이 손상되는 변경의 형식
이 변경 사항은 동작 변경입니다.
변경 이유
헤더가 중요한 것으로 지정되지 않으면 중요한 정보가 로그에 노출될 수 있습니다. 이 변경을 통해 기본적으로 로깅을 안전하게 만들었습니다.
권장 조치
헤더를 기록하려면 중요한 정보가 포함될 수 있는 헤더를 평가하고 RedactLoggedHeaders
API를 사용하여 명시적으로 헤더를 지정합니다. ConfigureHttpClientDefaults(IServiceCollection, Action<IHttpClientBuilder>)를 사용하여 클라이언트마다 또는 모든 클라이언트에 대해 전역적으로 헤더를 수정할 수 있습니다.
"차단 목록" 접근 방식 대신 "허용 목록" 접근 방식을 사용하는 것이 좋습니다.
헤더 중 어느 것도 중요한 정보를 포함할 수 없다고 확신하거나 내부 디버그 목적인 경우, 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));
영향을 받는 API
.NET