43 lines
1.8 KiB
Go
43 lines
1.8 KiB
Go
package middleware
|
|
|
|
import "strings"
|
|
|
|
// redactedValue replaces a sensitive value in every log line and audit record.
|
|
const redactedValue = "***"
|
|
|
|
// sensitiveHeaders lists the headers whose value never reaches a log, compared
|
|
// after lowercasing.
|
|
var sensitiveHeaders = map[string]struct{}{
|
|
"authorization": {}, "proxy-authorization": {}, "cookie": {}, "set-cookie": {}, "x-token": {},
|
|
}
|
|
|
|
// sensitivePayloadKeys holds the normalized query and JSON body keys whose
|
|
// values never reach a log or an operation record. Keys are compared after
|
|
// lowercasing and stripping separators, so "new_password" and "newPassword"
|
|
// both match "newpassword".
|
|
var sensitivePayloadKeys = map[string]struct{}{
|
|
"password": {}, "newpassword": {}, "oldpassword": {}, "confirmpassword": {},
|
|
"passwd": {}, "pwd": {}, "token": {}, "accesstoken": {}, "refreshtoken": {},
|
|
"secret": {}, "clientsecret": {}, "apikey": {}, "privatekey": {}, "idcard": {},
|
|
"key": {}, "signingkey": {}, "secretkey": {},
|
|
"appkey": {}, "mchkey": {}, "apiv3key": {}, "clientcert": {}, "clientkey": {},
|
|
"platformcert": {}, "platformserialno": {}, "publiccert": {}, "credentialcode": {}, "certfile": {},
|
|
"keyfile": {}, "publickey": {}, "rootcert": {}, "appcert": {}, "webhookid": {},
|
|
"authorization": {},
|
|
}
|
|
|
|
func isSensitiveHeader(key string) bool {
|
|
_, sensitive := sensitiveHeaders[strings.ToLower(key)]
|
|
return sensitive
|
|
}
|
|
|
|
// isSensitivePayloadKey also matches every key ending in "token" so provider
|
|
// specific token names stay masked without being enumerated.
|
|
func isSensitivePayloadKey(key string) bool {
|
|
normalized := strings.ToLower(strings.ReplaceAll(strings.ReplaceAll(key, "_", ""), "-", ""))
|
|
if _, sensitive := sensitivePayloadKeys[normalized]; sensitive {
|
|
return true
|
|
}
|
|
return strings.HasSuffix(normalized, "token")
|
|
}
|