AliExpress 首页静默运行 WebAudio 指纹识别:零音量音频图如何抢走你的蓝牙耳机
原创 · 约 28 分钟阅读 · 阅读 --

AliExpress 首页静默运行 WebAudio 指纹识别:零音量音频图如何抢走你的蓝牙耳机

作者: Alex Xiang


我是 Alex Xiang,字与码(zicode.com)主理人。这篇文章来自一次真实的「耳机切不回手机」困扰,牵出了一套大型电商的无授权设备指纹体系。如果你做前端、安全或隐私相关,欢迎关注公众号「字与码」,我会持续拆解这类「看不见的 Web 行为」。

2026 年 8 月 20 日,一篇逆向分析文章在 Hacker News 上引发热议(891 分、292 条评论):一位开发者发现,打开 AliExpress 首页后,页面上会静默创建两个隐藏的 WebAudio 音频上下文,把一个「零音量」的音频图接到系统音频输出上——这本来是阿里巴巴风控体系做浏览器指纹采集的手段,却意外导致他的双设备蓝牙耳机(multipoint)无法从电脑切回手机。更讽刺的是:标签页静音、浏览器静音、系统静音全部无效,因为页面上根本没有任何可静音的媒体元素。

这件事对中文开发者有双重价值:一方面它是「大型电商反滥用体系如何做无声指纹采集」的罕见实锤(涉及阿里自研的 AWSC 前端风控脚本);另一方面它暴露了 Web Audio API 权限模型的盲区——不需要任何用户授权就能让浏览器持续占用系统音频路径。这篇文章还原作者的完整取证过程、拆解音频指纹的原理,再讨论它对 Web 隐私与安全设计的启示。

一句话先给结论:这是「没有声音的音频」:振荡器产生波形 → 分析器读取浏览器音频渲染结果 → 零增益节点接到系统音频输出。它不播放任何声音,但足以让浏览器把音频路径「握在手里」,甚至改变外部蓝牙硬件的行为。WebAudio 不需要用户授权即可创建并激活上下文,是当前 Web 权限模型的一个真实盲区。

一、现象:一个打开即复现的蓝牙 Bug

作者(博主 m-c-tech)使用的耳机支持 multipoint 蓝牙音频,同时连接 PC 与手机:PC 播放时优先,PC 空闲时手机出声。这个机制平时工作正常,直到——只要在 Firefox/Chrome 里打开 AliExpress 首页,手机上正在播放的音乐就会立刻中断。

  • 关闭 AliExpress 标签页:立即恢复;
  • 静音标签页 / Firefox / Windows:完全无效;
  • 页面上没有任何可见的视频、音乐或媒体元素:无 <audio>、无 <video>、无 MediaSession 元数据、无媒体请求。

这不是常规的自动播放视频——常规媒体会被浏览器标签页静音机制拦下来。作者由此怀疑问题出在 Web Audio API,于是对页面做了插桩取证。

二、取证:拦截 AudioContext,抓到两个「幽灵」上下文

作者在加载页面前,先包装了 AudioContext 构造函数与 AudioNode.prototype.connect(),记录任何音频处理上下文的创建与连接行为:

const OriginalAudioContext = window.AudioContext;
window.AudioContext = class extends OriginalAudioContext {
  constructor(...args) {
    super(...args);
    console.log("AudioContext created", {
      state: this.state,
      stack: new Error().stack,   // 记录创建者调用栈
    });
  }
};
// 再包装 AudioNode.prototype.connect(),观察谁连到了 destination

结果:AliExpress 首页空闲挂起几秒后,创建了两个 AudioContext,都进入 running 状态,且都向 AudioContext.destination 接了节点。与此同时:零个媒体元素、零次 play() 调用、无 Media Session、无任何可闻声音。

构造函数调用栈指向了两个脚本(都挂在 assets.aliexpress-media.com/g/AWSC/ 目录下,属于阿里巴巴浏览器安全与反滥用工具链):

脚本路径来源
collina.jsg/AWSC/uab/1.140.0/collina.js创建第一个 AudioContext
fireyejs.jsg/AWSC/fireyejs/1.231.67/fireyejs.js创建第二个 AudioContext

两个脚本都经过重度混淆(heavily obfuscated),但残留的标识符足以让 AI 辅助分析还原出音频代码的意图。

三、原理:零音量振荡器为什么能「抢走」音频路径

两个脚本构建的 WebAudio 图基本一致:

Sawtooth oscillator(锯齿波振荡器)
    → AnalyserNode(分析器)
      → ScriptProcessorNode(脚本处理节点)
        → GainNode 设为 0(零增益)
          → AudioContext.destination(系统音频输出)

工作原理拆开看:

  • 振荡器生成已知波形,作为「探测信号」;
  • AnalyserNode 测量波形经过浏览器音频实现之后的频域结果——不同浏览器版本、操作系统、音频库、硬件声卡对同一信号的处理存在微小差异,这就是指纹来源;
  • GainNode 增益为 0,用户理论上听不到声音;
  • 图仍然连到了系统音频目的地,浏览器因此认为页面正在进行实时音频处理,会持续激活音频路径。

关键点在于:这与自动播放视频完全不同。没有媒体元素,浏览器的标签页静音控件无从下手;对页面而言,它只是在做「实时音频处理」,属于合法行为。作者的环境里,这种持续激活足以让 Firefox/Windows 保持 PC 的蓝牙音频通道,阻止 multipoint 耳机干净地切回手机。

一个常被混淆的点:浏览器的「自动播放策略」(Chrome 2018 年起)管的是媒体元素的播放要不要先有用户手势,并不禁止创建并运行 AudioContext。只要不把声音路由到一个可闻输出、或像本案这样把增益设为 0,页面就能让音频图长期处于 running 且连接到 destination——于是音频路径被「握在手里」,却没有任何权限弹窗、没有可静音的控件。

四、不止音频:这是一套完整的浏览器指纹

音频探测只是这两个脚本的一小块。对打包代码的检查发现,它们还采集:

类别测量项
图形Canvas 渲染与 toDataURL()、WebGL 渲染器信息/扩展/着色器精度
音频振荡器与分析器输出(本文主角)
设备屏幕与视口尺寸、devicePixelRatio、硬件并发数(navigator.hardwareConcurrency)、设备内存(deviceMemory
环境已安装浏览器插件、支持的音视频格式、WebRTC 行为、performance 计时
交互鼠标、触摸、焦点、滚动事件;设备运动与方向属性;自动化(headless)浏览器特征

结果会序列化并加密,通过 fetch() / sendBeacon() 上报到阿里巴巴的遥测服务。单靠音频指纹不足以唯一标识设备,但叠加 Canvas、WebGL、硬件参数、交互时序后,就能构成高区分度的设备标识,或者作为欺诈/机器人检测评分的一项输入。

五、动机:为什么 AliExpress 要这么干

作者的分析很克制:AliExpress 有充分的业务理由区分「正常购物者」与「自动化客户端」——账号接管、虚假账户、爬虫、自动下单、支付欺诈、刷评论、薅新客优惠等。而 Cookie 不可靠(可被清除、复制、替换),一个由多个独立浏览器测量拼成的指纹更难被一致地伪造。交互数据还能辅助判断浏览器背后是人还是自动化程序。

作者的立场:「我不希望一个购物首页静默动用我的图形、音频、WebRTC、硬件与运动传感器 API 来追踪我的行为——尤其它还以『挡住我音乐』这种讨厌的方式表现出来。也许如果不是 AliExpress 挡住我的音乐,我根本不会去查这个站到底在干什么。」

六、屏蔽方法(uBlock Origin 规则)与注意事项

作者测试了用 uBlock Origin 屏蔽这两个脚本族:屏蔽后首页正常渲染,控制组抓不到任何 AudioContext 与音频连接。规则如下:

! AliExpress AWSC fingerprinting scripts
||assets.aliexpress-media.com/g/AWSC/uab/*/collina.js$script,domain=aliexpress.com
||assets.aliexpress-media.com/g/AWSC/fireyejs/*/fireyejs.js$script,domain=aliexpress.com

注意两点:

  • 必须关掉已打开的 AliExpress 标签页再重开——屏蔽脚本不会关停已经创建的音频上下文;
  • 这些脚本与风控相关,屏蔽后登录或支付可能触发更多 CAPTCHA,作者建议遇到正常登录/付款被拒时临时禁用这两条规则。

七、行业对照:凡无需授权的 API,都可能被改造成测量仪器

音频指纹并非 AliExpress 首创,它是一整套「无声测量」技术里的一员。这个方向最早被系统性记录,是普林斯顿 Englehardt 与 Narayanayya 的 Online Tracking: A 1-million-site Measurement Study(2016),以及后来的 AmIUnique、FingerprintJS 数据库——它们把 Canvas、WebGL、AudioContext 列为高熵信号。常规做法是用 OfflineAudioContext + DynamicsCompressorNode 渲染出一段哈希,本案的特别之处是把图接到真实 destination 并长期 running,于是副作用溢出到了系统音频硬件

同一思路的更极端变体在 HN 讨论里被反复提起:

  • eBay 的 WebSocket 端口扫描:通过 WebSocket 探测本机开放端口,做内网/本地服务指纹;
  • Reddit 滥用 DRM / JIT 内省:借受版权保护内容的解密路径或 JIT 行为差异来测量环境;
  • 它们的共同点:不需要任何权限弹窗,只是「借」了某个本就合法的 API,把它变成测量仪器

八、浏览器如何反击:farbling 与信号归一化

站在 2026 年回看,这条猫鼠游戏的天平正在向「平台级归一化」倾斜。各厂商不再依赖用户去点权限弹窗,而是直接对高熵信号动手脚(DataDome 称之为「指纹识别时代的终结」):

浏览器做法
Braveper-session「farbling」:对 Canvas、WebGL、AudioContext 的频率数据注入每会话随机噪声,使跨会话关联失效,但不破坏单站可用
Firefoxprivacy.resistFingerprintingAudioContext.sampleRate 归一化到 44100、把 hardwareConcurrency 固定、遮罩 WebGL 渲染器;配 Strict 的 Enhanced Tracking Protection
Tor Browser更高安全级别直接禁用 WebGL、对音频渲染输出加噪,代价是 3D 地图/网页游戏可能失效
Safari(iOS 26)Advanced Fingerprinting Protection 默认开启,对 Canvas/WebGL/WebAudio 注入噪声(AudioContext.sampleRate 回退为通用值 48000);Lockdown Mode 进一步禁用 Audio 等 Web API

一个常见误解值得点破:VPN 防不了指纹。指纹来自本地 JS API 的返回值(声卡、驱动、字体渲染),与网络路由无关;想降噪得靠上面这些浏览器自身的能力,或用 EFF 的 Cover Your Tracks 先测自己的「可识别度」。

九、独立观点:真正的病根是「能力型」而非「意图型」权限模型

我的看法比「加个权限弹窗」更悲观一点。给 WebAudio 加一个类似摄像头/麦克风的授权弹窗,大概率只是表演性合规:电商页面确实要播视频声音,用户几乎一定会点允许,而「顺带做指纹」的动机并不会因此消失——弹窗挡不住「借合法能力做测量」的本质。这正是 HN 里有人马上指出的那句。

所以可持续的防线不在「授权」,而在信号归一化:让每个浏览器实例的音频/Canvas/WebGL 输出趋同(Brave 的 farbling、Firefox 的 RFP、Safari 的噪声注入)。当用户群体里的信号方差被压下去,单点的区分度就丧失了——这是用「对抗识别」替代「请求许可」,方向是对的。

但本案里最值得工程团队警惕的,其实是副作用越界:指纹采集代码占住了音频路径,进而改变了外部蓝牙硬件的行为。这把「隐私问题」升级成了「功能干扰」——用户不是被「偷偷识别」,而是被「真实影响」。这类「无感运行时副作用」恰恰是风控脚本最难被审计的地方:代码重度混淆、常驻首页、与业务诉求绑定。给团队的三条护栏:

  • 测量性代码只在风控判定必需的时机与页面启用,不要在首页常驻;
  • 任何「激活系统资源路径」的行为都应视为用户可见事件,至少要有可观测、可关闭的开关;
  • 风控与隐私/体验之间设明确护栏,副作用超出业务边界时要有熔断。
这个案例最好的注脚来自 HN 讨论中的一句调侃:「对某些人这是 Bug,对另一些人这是功能。」当「静默采集」成为默认,用户只能靠第三方过滤规则自保——这不是健康的 Web 生态该有的样子。而把希望寄托在「平台级归一化」上,才算是把责任放回到了该放的地方。

结语

一个「耳机切不回手机」的小烦恼,牵出了一套完整的无授权设备指纹体系。技术层面,零增益音频图是 WebAudio 能力被改造为测量工具的教科书案例;产业层面,它提醒所有做风控/反滥用的团队:隐蔽性与副作用之间没有免费午餐。对普通用户,至少现在有了一条可用的 uBlock 规则;对开发者,这是一个值得写进「Web 权限模型漏洞」清单的真实案例;对平台,farbling 与归一化正在成为新的默认——只是来得有点晚。

信息来源

打开原图 ↗