Sentry 前端被 Brave 浏览器屏蔽:如何通过隧道解决问题
一位学生从 Brave 浏览器中进行 KeepCoding 的心理测试时报告了一个问题,但该问题从未成功上传到 Sentry。团队技术支持人员查看了控制面板,却没有发现任何内容,便让他再次测试。同时,针对生产环境的 Playwright 烟雾测试显示所有情况正常:SDK加载,事件被处理,Sentry.flush()返回了true。一切看起来都没有问题。 依据不完整数据做出的产品决策比凭直觉合理性决策更糟,因为它们是基于虚假的数据安全感做出的。 背景:为什么 Brave 的情况特别重要 Brave 是一款内置广告屏蔽功能的浏览器,称为 Shields(保护盾)。它可以在默认情况下过滤广告和追踪器,而无需安装额外的插件。根据 Brave Software 2024年公布的公开数据,该浏览器的月活跃用户已经超过8000万。这一数字之所以重要,是因为用户分布并不均匀:Brave 的用户基础更倾向于技术人员、开发者和新潮用户。 对于面向普通大众的应用,这种偏向可以忽略不计;但对于以开发者为目标群体,例如针对开发者训练营申请者的技术评估应用来说,首批报告错误的用户极有可能来自使用 Brave 的人。 类似的情况也发生在使用 uBlock Origin 的 Chrome 或 Firefox 用户,以及启用了 **严格追踪保护(Strict Tracking Protection)**的 Firefox 配置用户,或通过企业网络使用 Pi-hole DNS阻止机制的用户。这些类别的交集——即启用了某种制止追踪器的积极拦截机制的用户——据相关阻止名单的覆盖研究显示(如 EasyPrivacy 用户超过400万订阅者),很容易占据技术流量的15-20%。 问题:保护盾会屏蔽两项内容,而不仅仅是一项 Sentry 的浏览器 SDK 以两个阶段工作。在第一阶段,浏览器从 Sentry 的 CDN 下载软件开发包的 JavaScript 包,通常位于 js-de.sentry-cdn.com 或 browser.sentry-cdn.com 下。在第二阶段,SDK 初始化后,将捕获到的事件发送到以 *.ingest.sentry.io 为主机的摄取端口(endpoint)。 Brave 的保护盾(Shields)会检查两个列表:一个是浏览器的全局列表,一个是针对具体网站启用的列表。关闭保护盾仅适用于网站域名,不影响全局列表。而全局列表中包括以下一些域名: *.sentry-cdn.com *.ingest.sentry.io *.ingest.de.sentry.io 此问题已在 Brave 社区的公共讨论线程中 “Brave blocks sentry endpoint even with shield down for website” 提及,但在 Sentry 官方文档中并未做出明确警告。实际后果是,使用 Brave 的用户会在控制台看到两个错误: ...