阿里巴巴的 AliExpress 被发现使用用户的音频系统来跟踪他们

来源: https://x.com/brave/status/2091232672659972110

阿里巴巴的 AliExpress 被发现使用用户的音频系统来跟踪他们。

AliExpress 并不是在录制用户,而是播放一种无声的声音,并测量用户的特定设备如何处理它,以便对他们进行指纹识别。

但别担心,因为 Brave 阻止了这一点。

技术分析: https://blog.laserphile.com/2026/08/aliexpress-webpage-keeping-multipoint.html

AliExpress网页通过WebAudio指纹识别保持多点蓝牙耳机处于激活状态

最近我的蓝牙耳机遇到了一个奇怪的问题。这款耳机支持多点蓝牙音频连接,可以同时连接到我的电脑和手机。通常情况下,电脑会优先播放音频,只有当电脑没有播放音频时,手机才能播放。

我通常用手机听音乐,但通过电脑播放通知或 YouTube 时,一切正常,直到我在 Firefox 或 Chrome 中打开 AliExpress 页面(其他浏览器未经测试)。

加载 AliExpress 首页后不久,手机音频就会停止播放。关闭 AliExpress 标签页后问题立即解决。将标签页/Firefox/Windows 静音均无效,而且页面上没有任何视频、音乐或其他媒体正在播放。

这事看起来很可疑,值得调查。

寻找隐藏媒体

我首先想到的是自动播放的产品视频或广告,所以我检查了常见的几种情况:

  • 调用 HTMLMediaElement.play()
  • 活动媒体会话元数据
  • 媒体请求
  • 包含媒体的嵌入式帧

这些都没有显示任何有用的信息。没有音频或视频元素,没有媒体播放调用,navigator.mediaSession.playbackState 也仍然为 None。

一个线索是,问题并非立即出现,而是在页面闲置几秒钟后才显现出来。我在页面加载前对其进行了检测,并监控了 Web Audio API,而不仅仅是查找传统的媒体元素。

基本思路是封装 AudioContext 构造函数,并记录页面每次创建音频处理上下文时的情况:

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(),以便查看是否有任何设备连接到上下文的音频目标。

终于找到了,两个隐藏的音频上下文!

在对 AliExpress 首页进行空闲状态捕获时,该页面创建了两个 AudioContext 对象。这两个对象都进入了运行状态,并且都连接到了 AudioContext.destination 节点。

与此同时,仍然存在:

  • 零个音频或视频元素
  • 零媒体播放() 调用
  • 没有正在进行的媒体采访
  • 没有可听见的声音

构造函数堆栈跟踪指向两个脚本:

https://assets.aliexpress-media.com/g/AWSC/uab/1.140.0/collina.js

https://assets.aliexpress-media.com/g/AWSC/fireyejs/1.231.67/fireyejs.js

第一个上下文由collina.js创建,第二个上下文来自fireyejs.js。两者都位于AWSC目录下,并且似乎是阿里巴巴浏览器安全和反滥用工具的一部分。

脚本经过了高度混淆处理,但其中仍然保留了足够多的名称和操作,人工智能可以据此推断音频代码的作用。

音频代码的作用

这两个脚本都会构建一个类似于这样的 WebAudio 图:

锯齿振荡器

→ 分析器节点

→ ScriptProcessorNode

→ 增益节点设置为零

→ AudioContext.destination

振荡器产生一个已知的波形。分析仪测量经过浏览器音频处理后的结果,脚本从中读取频率数据。

增益已设置为零,因此用户应该听不到任何声音。但是,该图表仍然连接到系统音频目标。即使最终音量为零,连接到目标也会导致浏览器主动处理该图表。

这与自动播放的视频截然不同。浏览器的普通标签页静音控件无法停止任何媒体元素。就页面而言,它正在进行实时音频处理。

就我而言,这似乎足以让 Firefox 或 Windows 保持蓝牙音频路径处于活动状态,从而阻止我的多点耳机干净利落地切换回手机。

编辑 - 似乎已经有一个针对此问题的 Firefox 错误报告: https://bugzilla.mozilla.org/show_bug.cgi?id =1863193#c9

这看起来像是指纹识别。

WebAudio 测试并非这些脚本中唯一的测量指标。检查脚本包后发现,其中还包含查询或测量以下指标的代码:

  • 画布渲染和 toDataURL()
  • WebGL渲染器信息、扩展和着色器精度
  • 音频振荡器和分析仪输出
  • 屏幕和视口尺寸
  • 设备像素比
  • 硬件并发性和设备内存
  • 已安装的浏览器插件
  • 支持的音频和视频格式
  • WebRTC行为
  • 浏览器性能计时
  • 鼠标、触摸、聚焦和滚动事件
  • 设备运动和方向
  • 与浏览器自动化相关的常见属性

此外,还有用于序列化和加密结果、向阿里巴巴遥测服务发出请求以及使用 fetch() 或 sendBeacon() 发送数据的代码。

这是一个相当全面的浏览器和设备指纹信息。

音频指纹识别之所以有效,是因为浏览器版本、操作系统、音频库和硬件的细微差异会导致同一信号产生略微不同的结果。单凭音频指纹识别本身并不足以唯一识别设备,但当它与画布、WebGL、硬件、时序和交互数据结合使用时,其效用会大大提升。

编辑 - Firefox 开发者 tomrittervg 对 WebAudio 的指纹识别机制进行了更深入的研究: webaudio fingerprinting on alibaba - ritter.vg

我无法得知 AliExpress 在数据到达其服务器后会如何处理这些数据。它可能被用作持久设备标识符,但也可能是欺诈或机器人检测评分的输入项之一。

Why AliExpress would want this

AliExpress有很多理由区分正常购物者和自动或可疑客户,并追踪用户的浏览习惯。该网站必须应对账户盗用、虚假账户、数据抓取、自动购买、支付欺诈、评论操纵以及滥用优惠券或新用户促销活动等问题。此外,像大多数大型企业一样,他们也利用庞大的用户行为数据集来更好地推广产品和服务。

由于 Cookie 可以被清除、复制或替换,因此它们并非特别适用于此目的。而由众多独立浏览器测量数据构成的指纹则更难被持续篡改。

交互数据还可以帮助判断浏览器是由真人还是机器控制。从速卖通的角度来看,这可以减少欺诈,并允许受信任的客户无需每隔几页就显示验证码即可完成购买。当然,速卖通也并非完全排斥人工智能生成的验证码。

我个人不希望购物网站在后台悄悄地使用我的图形、音频、WebRTC、硬件和运动 API 等资源来追踪我的行为,尤其是不希望它像屏蔽我的音乐那样令人恼火。 如果 AliExpress 没有屏蔽我的音乐,我可能永远都不会去探究这个网站到底在做什么。

使用 uBlock Origin 进行屏蔽

我测试了屏蔽两个已识别的脚本系列。屏蔽这两个请求后,AliExpress 首页仍然继续渲染,并且在控制捕获期间没有出现任何 AudioContext 对象或目标连接。

在 Firefox 浏览器中,我使用 Raymond Hill 开发的官方 uBlock Origin 扩展程序。要屏蔽脚本,请打开 uBlock 控制面板,选择“我的过滤器”,然后添加:

! AliExpress AWSC 指纹识别脚本

||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 标签页,然后重新打开网站。必须关闭现有标签页,因为阻止脚本并不会关闭它已经创建的音频上下文。

这些规则刻意设置得比较严格。它们只屏蔽已知的两种脚本系列,而且仅在速卖通提出请求时才会生效。如果将来这些规则失效,我不会感到意外,到时候再说吧。

由于这些脚本似乎与反欺诈系统相关,屏蔽它们可能会导致登录或结账时出现额外的验证码或其他问题。目前首页和普通产品浏览功能仍然正常,但如果 AliExpress 拒绝合法登录或付款,我会暂时禁用这些规则。

我为什么要屏蔽它

反欺诈用途可以理解,但这种实现方式存在实际问题。

它会在我执行敏感操作之前在通用购物主页上运行。它会收集大量的设备和行为测量数据,其实现方式故意设计得难以检查,而且没有任何迹象表明页面已启动实时音频处理程序。

它还产生了一个非常真实的硬件副作用。静默指纹测试能够干扰蓝牙多点切换,而浏览器的静音控制却毫无作用!

如果隐藏的分析或安全功能能够对音频路径产生足够强大的控制力,从而改变外部硬件的行为,那么阻止它似乎是一个合理的权衡。

我也无法证明速卖通会保存指纹多久,或者它是否会在阿里巴巴的其他平台上使用。客户端代码表明,他们确实收集并传输了大量类似指纹的测量数据,但从浏览器上却看不到服务器端的保留行为和身份关联。你真的能相信互联网上的任何人会真心为你着想吗?

TL;DR

AliExpress 首页会悄悄地利用经过高度混淆的阿里巴巴安全脚本创建两个正在运行的 WebAudio 图。这些图会生成并分析波形,作为更庞大的浏览器指纹的一部分,然后通过零增益节点连接到系统音频目标,从而阻止用户听到任何声音。

在我的设置中,这似乎会保持电脑的蓝牙音频路径处于活动状态,并阻止多点耳机切换回手机连接。将标签页静音也无法解决问题,因为没有可以静音的传统媒体元素。

使用上述两条 uBlock Origin 规则屏蔽 collina.js 和 fireyejs.js,可以防止创建隐藏的音频上下文,这意味着我可以一边浏览 AliExpress,一边愉快地听音乐而不会被打断。

编辑 - Hacker News 上有一些很棒的讨论,值得一看:https://news.ycombinator.com/item? id=49372583