fix(chat): avoid full secret exposure for 7-char secrets (#1942)

- ensure at least 40% of the characters are masked for secrets of length 4 or more
- secrets with length <= 6 now show first and last char with mask
- secrets with length <= 12 now show first two and last two chars
- longer secrets show 3 prefix and 4 suffix
This commit is contained in:
LC 2026-03-24 11:26:20 +08:00 committed by GitHub
parent cf9e0496f7
commit ce1619051d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4,13 +4,20 @@ export function maskedSecretPlaceholder(value: unknown, fallback = ""): string {
return fallback return fallback
} }
if (secret.length < 7) { // ensure at least 40% of the characters are masked for secrets of length 4 or more
if (secret.length <= 6) {
const first = secret[0] const first = secret[0]
const last = secret[secret.length - 1] const last = secret[secret.length - 1]
return `${first}***${last}` return `${first}***${last}`
} }
const prefix = secret.slice(0, Math.min(3, secret.length)) if (secret.length <= 12) {
const suffix = secret.slice(-Math.min(4, secret.length)) const firstTwo = secret.slice(0, 2)
return `${prefix}***${suffix}` const lastTwo = secret.slice(-2)
return `${firstTwo}****${lastTwo}`
}
const prefix = secret.slice(0, 3)
const suffix = secret.slice(-4)
return `${prefix}*****${suffix}`
} }