我写了隐私规则、强制了它、注释了它,却还是把泄露送上了线
来源:dev.to — 2026-08-23
📋 概述
作者维护本地优先的健身追踪应用 WhyRep,在接入 Sentry 之前就写好脱敏策略,用 beforeSend 钩子强制清除被禁止的字段,还写了单元测试,并在那句最敏感、写着"绝不能发送 payload"的代码上方加了注释。然而他用 Puppeteer 截获浏览器实际发出的字节时,发现一位陌生人的肩部伤病数据仍然泄露了——因为 payload 藏在 URL 片段里,而 Sentry 浏览器 SDK 会自行把 location.href 附加到每个事件上,与作者代码无关。更糟的是同一 grep 又发现第二个泄露:用户邮箱作为 Firestore 文档 id 出现在请求路径里,被 Sentry 自动收集的 fetch breadcrumb 原样记录。作者最终意识到,SDK 有错误、事务、面包屑三条不同的出口路径,只堵住 beforeSend 一条等于只保护了你恰好想到的那扇门。
🔑 核心要点
- Sentry 浏览器 SDK 会自动把 location.href 附加到每个事件,URL 片段里的敏感 payload 就这样被带了出去,与作者自己写的代码无关。
- 事件、性能数据、面包屑走三条不同的出口路径,只靠 beforeSend 只能覆盖错误这一条,另外两条默认开着。
- 用邮箱作 Firestore 文档 id 会把邮箱塞进请求路径,被自动收集的 fetch breadcrumb 原样记录到第三方服务。
- 能真正证明"数据绝不外泄"的唯一测试,是截获出站字节并检索其中的敏感串,而不是读代码或看 diff。
💡 金句
一个只覆盖三条出口之一隐私控制,不是隐私控制——它只是保护了你恰好想到的那扇门。
👍 0
👎 0
← 返回 dev.to 首页