阿里全球通 AliExpress 通过一种类似间谍技术的手段来监控用户
一次蓝牙耳机故障,暴露了网页如何运行无声音频、收集多类设备信息,并在后台组成设备指纹。
- AliExpress 没有可听声音,标签页却显示正在使用音频,并在作者设备上干扰蓝牙切换。
- 网页用固定波形测试设备,把计算差异和图形、硬件、操作信息组合成设备指纹并上传。
- 两条规则可阻断,但可能影响登录和付款。
起因:蓝牙耳机突然被电脑“霸占”
AliExpress 使用了一种听起来很像间谍技术的手段来监控用户:它不是偷偷打开麦克风录音,而是在后台给设备做“指纹”。在目前找到的两条音频图里,没有麦克风输入,信号是网页自己生成的。网页让设备处理这段无声信号,再把结果和图形、硬件、操作信息拼成“设备指纹”。
这件事是技术作者 m-c-tech 无意中发现的。他的蓝牙耳机同时连着 Windows 电脑和手机。平时手机放音乐,电脑有声音时,耳机会自动切到电脑。
他打开 AliExpress 首页几秒后,手机音乐突然停了。网页没有播放视频或音乐,把标签页、浏览器和 Windows 静音也没用。只有关掉 AliExpress 标签页,手机音乐才马上恢复。
这是他在一套 Windows、手机和蓝牙多点耳机上的复现,不代表所有耳机都会这样。但这个故障暴露了一件事:AliExpress 页面虽然没有发出声音,却一直让电脑的音频通道保持活跃。

midudev 在西班牙 AliExpress 页面拍到:标签页出现了扬声器图标,说明浏览器把这个网页认作正在使用音频。图中的西班牙语 te identifica 意为“它识别你”,是原帖加上的判断;单凭这个图标,只能证明网页启用了音频通道,不能证明它已经识别出具体的人。
类似的底层问题并不是第一次出现。Mozilla 在 2023 年就记录过:AliExpress 页面会让 Windows 11 持续认为音频设备正在使用,甚至阻止电脑按时休眠;关掉标签页后才恢复正常。
破案:网页在后台运行一段听不见的音频
作者继续检查,发现页面在后台启动了两个 AudioContext。可以把它理解成网页内部的音频处理器。一个来自 collina.js,另一个来自 fireyejs.js,两者都处于运行状态。

补充素材:midudev 在西班牙 AliExpress 首页的开发者工具里也截到了 fireyejs.js,代码中能看到 onaudioprocess 和连接音频输出的语句。这证明相关代码确实被加载,不代表服务器已经把访问者关联到具体身份。
它们做的事,可以理解成网页给设备出了一道很短的“数学题”。
第一步,网页自己生成一段固定的锯齿波。这不是从麦克风录来的声音,而是一串由代码算出来的信号。无论谁打开网页,题目基本相同。
第二步,浏览器让电脑的 CPU、音频引擎和底层驱动处理这段信号。不同硬件、操作系统和浏览器在浮点计算、舍入和音频实现上可能出现极小差异,就像不同计算器算同一道题,最后几位小数略有不同。
第三步,脚本读取处理结果,把这些人耳无法分辨、代码却能读取的细小差异变成一组数字。这组数字才是“音频指纹”的原料;网页生成的锯齿波只是试题,不是它要保存的指纹。
最后,脚本把输出音量设成 0,所以人听不见。但为了完成这套处理,它仍把音频图连接到了浏览器的系统输出端点 destination。这也是浏览器可能显示扬声器图标的原因。
网页生成固定波形
这是代码生成的“试题”,不是麦克风录音
设备计算这道题
CPU、浏览器和驱动可能在最后几位产生差异
读取差异,音量设为 0
网页拿走数字结果,人耳仍听不见
没有妥善停止上下文
部分处理可能继续,系统仍认为音频设备在用
蓝牙耳机可能留在电脑侧;另一套 Mozilla 记录中,Windows 自动休眠也被阻止。
蓝牙后果来自作者的一套设备;休眠后果来自 Mozilla 的另一套 Windows 11 记录。
测量本身很短。Mozilla 日志显示,约 80—100 毫秒后部分节点已经断开;但脚本没有妥善停止、挂起或关闭整个音频处理器。对操作系统来说,“没有可听见的声音”和“没有音频任务”不是一回事,因此它仍可能认为这个标签页占着音频设备。
结果是:系统仍可能把音频设备当成正在使用。在作者的设备上,蓝牙耳机因此留在电脑这一侧,不能顺利切回手机;在 Mozilla 记录的另一套环境里,它还阻止了 Windows 自动休眠。
这也解释了为什么“静音”无效:静音只负责不让你听见,不会替网页关闭 AudioContext。支持多点连接的耳机也不会分析声音是不是零音量,它只看到电脑这边仍有音频会话。在作者的耳机上,电脑因此继续获得优先权,手机音乐被打断。关掉标签页后,音频处理器被销毁,耳机才恢复正常。
真正的技术:给设备做“指纹”
无声音频只是其中一项。两段脚本还会收集很多设备特征:
- Canvas、WebGL 等图形表现;
- 屏幕尺寸、像素比例、CPU、内存和浏览器插件;
- 音视频格式、WebRTC 和运行速度;
- 鼠标、触摸、滚动、传感器和自动化工具的迹象。
更隐蔽的地方在于,这些高度混淆的脚本在普通购物首页就会加载,页面没有明显提示。
网站关心的不是其中某一个数字,而是这些特征放在一起时,当前设备表现得像什么。音频测试像一张答卷,Canvas、显卡、屏幕、CPU、插件和操作习惯则是其他答卷。单看一张未必能认出设备,把多张答卷拼在一起,可区分的范围就会变小。
这些信息会和音频测量结果放在一起,经过序列化、加密,再上传到 Alibaba 的遥测服务。单看任何一项都未必特别,但组合起来,就像给当前浏览器和设备做了一枚“指纹”。
图形表现
Canvas、WebGL 等图形差异
屏幕与硬件
屏幕、像素比例、CPU、内存、插件
音视频与网络
音视频格式、WebRTC、运行速度
操作与传感器
鼠标、触摸、滚动、传感器、自动化迹象
无声音频结果
同一道波形经设备计算后留下的数字差异
音频像一张答卷,其他特征是更多答卷;拼在一起,设备就更容易被区分。
Firefox 118 后,99.24% 的音频结果落在三个主要值;服务器如何保存和使用组合数据仍未知。
为什么有 Cookie 还要做这一套?Cookie 可以被删除、复制或替换。多组设备特征却更难同时伪装,所以常被用来判断设备是否异常、访问者是真人还是机器人,并辅助反欺诈和风险评分。
但别把它说成万能追踪器。Firefox 118 以后,WebAudio 输出已经被大幅标准化:Mozilla 的样本中,99.24% 的结果落在三个主要值里,主要反映 CPU 指令架构,而不是某一台具体设备。
这意味着音频单项几乎不能独立锁定一台设备。它更像“这台设备属于哪一类”的线索,而不是身份证号码。真正提高辨识力的,是多类信息的组合。从网页里的代码,也看不出服务器会保存多久、如何把不同访问关联起来,或最终只用于反欺诈、反机器人,还是也用于用户追踪。
怎么屏蔽
作者用 Firefox 的 uBlock Origin 阻断了两个脚本。在“我的过滤器”中加入:
||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,或影响登录、结账和付款。遇到这种情况,可以临时停用规则再重试。脚本地址以后变化,规则也可能失效。
