← 返回题目列表

前端日志和埋点如何避免泄露敏感信息?

中等 第 24 / 26 题 更新于 2026/07/29
前端安全日志脱敏埋点隐私

简化版

前端日志和埋点常会采集 URL、接口错误、用户行为、设备信息和异常栈,如果不脱敏,可能泄露 token、手机号、身份证、邮箱、地址、订单号等敏感信息。安全做法是最小采集、字段白名单、URL 参数过滤、错误信息脱敏、禁止上报请求头中的认证信息,并控制日志平台权限、采样率和保留时间。

详细版

前端监控很容易“顺手多采”,但浏览器端数据常含用户隐私。

数据风险处理
URLquery 中含 token/手机号参数白名单或黑名单过滤
请求头Authorization/Cookie禁止上报
表单值隐私和账号信息默认不采
错误栈文件路径和业务信息过滤和权限控制
function sanitizeUrl(raw: string) {
  const url = new URL(raw, location.origin)
  for (const key of [...url.searchParams.keys()]) {
    if (!['page', 'tab'].includes(key)) url.searchParams.set(key, '***')
  }
  return url.pathname + url.search
}

日志安全的原则是:先问有没有必要采,再问怎么脱敏,而不是先全量上报。

完整版教学

一、为什么前端日志容易泄露

前端监控 SDK 往往会自动采集页面 URL、错误栈、接口地址、用户行为和设备信息。业务为了排查方便,也可能把接口参数、表单内容或响应体打进日志。

这些信息进入第三方监控平台后,访问范围、存储时间和合规风险都会扩大。

二、敏感信息有哪些

常见敏感信息包括:

  • token、session、Authorization。
  • 手机号、邮箱、身份证。
  • 地址、姓名、银行卡。
  • 订单号、支付流水。
  • 医疗、教育、金融等行业敏感字段。

不同业务要有自己的敏感字段清单。

三、最小采集原则

不要默认采完整请求和响应。排查性能和错误通常只需要状态码、耗时、接口路径、错误类型和 traceId。

目的足够字段
性能分析路径、耗时、状态码
错误定位错误类型、栈、版本号
用户影响匿名用户 ID、页面路径
链路追踪traceId、requestId

四、URL 参数过滤

URL 是泄露高发区。很多系统把 token、邀请码、手机号或搜索词放 query 里。

建议使用白名单保留必要参数,其他参数统一替换。

const allowed = new Set(['page', 'tab', 'sort'])

白名单比黑名单稳,因为你不一定知道未来会新增什么敏感参数。

五、错误信息脱敏

错误对象里可能包含接口参数、响应体和用户输入。上报前应统一 sanitize。

function mask(value: string) {
  return value
    .replace(/1\d{10}/g, '手机号***')
    .replace(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/g, '邮箱***')
}

正则脱敏只是兜底,根本还是不要采敏感字段。

六、平台权限和保留时间

即使前端做了脱敏,日志平台也要控制权限。不是所有开发、测试、运营都应该看到原始日志。

还要设置保留时间、审计访问记录和导出限制,避免日志变成长期敏感数据库。

七、常见误区与追问

  • 误区:日志只给内部看,不算泄露。 内部系统也有权限、合规和误导出风险。
  • 误区:脱敏靠几个正则就够。 正则只能兜底,更关键是字段白名单和最小采集。
  • 误区:前端埋点不采密码就安全。 URL、错误栈、请求参数和用户行为也可能敏感。
  • 追问:为什么白名单优于黑名单? 新增敏感字段时黑名单容易漏,白名单默认不采更安全。
  • 追问:Authorization 能不能上报? 不能,认证凭证应完全禁止进入日志。
  • 追问:如何兼顾排查效率? 用 traceId、版本号、状态码和脱敏后的上下文定位,再按权限临时查后端安全日志。

八、加强记忆

前端日志安全记成“少采、脱敏、控权”。URL 参数、请求头、表单值和错误上下文最容易出事;排查问题靠 traceId,不靠把用户隐私全传上去。