← 中文资源

简体中文版本

在应用日志中脱敏 PII

为邮箱、令牌与卡号等字段增加结构化日志脱敏,确保敏感数据不会落入日志存储。

阅读英文原文

目标

一次支持请求暴露了含完整邮箱与令牌的日志,让调试数据变成合规问题。本配方通过结构化日志钩子递归替换已知敏感键,在序列化前打码,并补充一个当敏感字段原样出现即失败的回归测试;同时提醒避免把原始值插值进自由文本消息。

步骤要点

  1. 递归脱敏已知敏感键。
  2. 用测试断言敏感值不会原样出现。
  3. 避免把原始值插值进消息文本。
  4. 维护敏感键清单并用真实样本测试。
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。
  • 需要日志统一走脱敏管线。