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:
parent
cf9e0496f7
commit
ce1619051d
1 changed files with 11 additions and 4 deletions
|
|
@ -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}`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue