一声不响的指纹,抢走了你的耳机
引言
多点蓝牙(Multipoint)是很多真无线耳机的标配功能:耳机同时连着电脑和手机,电脑有声音时耳机归电脑,电脑安静下来,手机的音乐自动接管。这套调度平时无感,直到它突然失灵。最近一位开发者注意到一个奇怪的规律:只要在 Firefox 或 Chrome 里打开 AliExpress(速卖通)的网页,手机端就会停止播放音频;关掉标签页,声音又自己回来了。他没有把这当成玄学,而是顺藤摸瓜,挖出了一个在浏览器里静默运行的指纹脚本(Solidot 报道)。
事件要点
排查逻辑其实不复杂。多点蓝牙的裁决规则是:PC 端存在音频活动时耳机归 PC,PC 静默时才轮到手机。手机被“抢麦”,意味着浏览器在 PC 上产生了某种持续的音频活动——而他什么都没播放。
深入调查后,答案浮出水面:AliExpress 页面中高度混淆的阿里巴巴安全脚本会创建两个 WebAudio 图形(AudioContext graph),在用户毫无感知的情况下静默运行。这属于典型的浏览器指纹采集——借音频 API 在不同硬件上的输出差异生成设备标识。讽刺的是,正是这个“没有声音的声音”,让系统误判 PC 始终持有活跃音频流,从而持续占用耳机通道。
目前用户可以通过 uBlock Origin 等扩展屏蔽相关脚本(collina.js 与 fireyejs.js),多点蓝牙随即恢复正常。
背景:指纹追踪的外部性
浏览器指纹是 cookie 之外网站识别用户的主要手段。不同设备在渲染 Canvas、执行 WebGL、处理音频信号时存在人眼和人耳都察觉不到的细微差异,把这些差异拼接起来,就能得到一台设备近乎唯一的“指纹”。相比 cookie,指纹不落地存储、难以清除、用户几乎无从察觉,因此被电商风控、反爬虫和广告定向广泛采用。
AudioContext 指纹是其中的经典手法:向音频管线送入一段特定信号,再采集输出端的浮点差异。整个过程通常被设计成静音播放——而这恰恰是问题所在。蓝牙多点连接依赖各设备上报的音频状态来裁决优先级,一个静默运行的 WebAudio 图形,在协议层面与正常播放并无本质区别,系统自然认为 PC 一直有活儿要干。
换句话说,速卖通的脚本并不是“出了 bug”,而是指纹技术的固有副作用第一次变得可以被普通用户感知。这个案例的价值正在于此:过去讨论浏览器指纹,常被归为“没有实际损失的隐私洁癖”;现在它有了一个可复现、可演示的症状——打开一个购物网站,耳机就换了主人。
反制手段上,用 uBlock Origin 屏蔽指定脚本是治标;Brave、Tor Browser 这类内置反指纹随机化的浏览器,或 Firefox 的 resistFingerprinting 配置,则是更系统的方案。但攻防始终是猫鼠游戏:脚本可以混淆、更换域名、合并进主资源包,普通用户的防御永远慢一拍。也别忘了,静默音频除了干扰蓝牙,还会持续占用音频管线、消耗少量 CPU 与电量——只是这些代价过去无人测量,也无人问责。
简短点评
这件事最值得记下的,不是某家电商平台用了一项激进技术,而是“静默”二字的普遍化:网页可以在你不知情时播放音频、绘制 Canvas、探测硬件特征。当这类行为开始产生可感知的功能故障,关于隐私与合规的讨论就有了新的锚点——即便不谈数据去向,至少用户应当被告知页面正在采集什么。在那一天到来之前,装一个内容拦截器,可能是普通用户离“知情同意”最近的一步。