Skip to content

Commit

Permalink
caddyhttp: Log empty value for typical password headers
Browse files Browse the repository at this point in the history
Work around for common misconfiguration
  • Loading branch information
mholt committed Nov 22, 2021
1 parent 7f364c7 commit 7d5047c
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions modules/caddyhttp/marshalers.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package caddyhttp
import (
"crypto/tls"
"net/http"
"strings"

"go.uber.org/zap/zapcore"
)
Expand All @@ -39,6 +40,8 @@ func (r LoggableHTTPRequest) MarshalLogObject(enc zapcore.ObjectEncoder) error {
}

// LoggableHTTPHeader makes an HTTP header loggable with zap.Object().
// Headers with potentially sensitive information (Cookie, Authorization,
// and Proxy-Authorization) are logged with empty values.
type LoggableHTTPHeader http.Header

// MarshalLogObject satisfies the zapcore.ObjectMarshaler interface.
Expand All @@ -47,6 +50,10 @@ func (h LoggableHTTPHeader) MarshalLogObject(enc zapcore.ObjectEncoder) error {
return nil
}
for key, val := range h {
switch strings.ToLower(key) {
case "cookie", "authorization", "proxy-authorization":
val = []string{}
}
enc.AddArray(key, LoggableStringArray(val))
}
return nil
Expand Down Expand Up @@ -75,8 +82,6 @@ func (t LoggableTLSConnState) MarshalLogObject(enc zapcore.ObjectEncoder) error
enc.AddUint16("version", t.Version)
enc.AddUint16("cipher_suite", t.CipherSuite)
enc.AddString("proto", t.NegotiatedProtocol)
// NegotiatedProtocolIsMutual is deprecated - it's always true
enc.AddBool("proto_mutual", true)
enc.AddString("server_name", t.ServerName)
if len(t.PeerCertificates) > 0 {
enc.AddString("client_common_name", t.PeerCertificates[0].Subject.CommonName)
Expand Down

0 comments on commit 7d5047c

Please sign in to comment.