目标
一次支持请求暴露了含完整邮箱与令牌的日志,让调试数据变成合规问题。本配方通过结构化日志钩子递归替换已知敏感键,在序列化前打码,并补充一个当敏感字段原样出现即失败的回归测试;同时提醒避免把原始值插值进自由文本消息。
步骤要点
- 递归脱敏已知敏感键。
- 用测试断言敏感值不会原样出现。
- 避免把原始值插值进消息文本。
- 维护敏感键清单并用真实样本测试。
const SENSITIVE = /^(password|token|authorization|email|cardNumber|ssn)$/i;
function redact(obj) {
if (Array.isArray(obj)) return obj.map(redact);
if (obj && typeof obj === 'object') {
return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, SENSITIVE.test(k) ? '[REDACTED]' : redact(v)]));
}
return obj;
}
排错提示
- 自由文本中的 PII 难以捕获。
- 过度脱敏会妨碍排错。
- 需让日志统一经过脱敏层。
适用边界
- 无法捕获非结构化文本中的 PII。
- 需要日志统一走脱敏管线。