AudioContext 指纹识别的工作原理
网页运行 JavaScript 并创建 AudioContext,通常使用不会向扬声器输出声音的 OfflineAudioContext。随后,脚本会:
- 使用振荡器生成已知信号。
- 让信号经过压缩器、滤波器等节点。
- 渲染信号并读取生成的采样值。
- 将选定值转换为短哈希值。
这些细微差异可能来自浏览器的音频引擎、浏览器版本、操作系统、CPU 架构和浮点运算。在同一软件环境中重复相同测试,通常会得到相似结果。
结果代表什么
这个哈希值并非设备序列号,许多用户可能得到相同结果。它需要与屏幕尺寸、已安装字体、时区和图形输出等其他浏览器指纹识别信号结合使用,才能发挥作用。
浏览器更新、操作系统变更或隐私保护功能都可能改变结果。部分浏览器会限制 Web Audio API、标准化其输出或添加噪声,以降低指纹的稳定性。
AudioContext 与 Canvas 指纹识别的区别
两种技术都会在浏览器内生成内容,并测量渲染过程中的细微差异,但测试的是不同子系统。
| AudioContext 指纹识别 | Canvas 指纹识别 | |
|---|---|---|
| 子系统 | 音频处理 | 2D 文本和图形 |
| 测量结果 | 音频采样值 | 渲染后的像素值 |
| 用户授权 | 通常不需要 | 通常不需要 |
Canvas 指纹识别通常会与 WebGL 指纹识别和音频测量结合使用,而不是单独使用。
为什么代理用户需要关注
代理会改变网站看到的 IP 地址,却不会改变 Web Audio 输出,因此轮换 IP 不会轮换 AudioContext 指纹。稳定的指纹如果出现在多个 IP 地址下,可能成为机器人检测的一项判断依据,但负责任的系统不应仅凭这一点将其视为确凿证据。
开展获授权的自动化与测试时,应保持浏览器环境一致,将请求频率控制在网站限制内,并遵守网站条款和 robots.txt。网站运营方应按要求披露指纹识别行为,只采集必要信号,避免根据单次噪声较大的测量结果决定是否允许访问。
常见问题
AudioContext 指纹识别会录制麦克风吗?
不会。常见方法会在浏览器内生成并处理合成信号。麦克风录音使用另一套受权限控制的 API。
代理能阻止 AudioContext 指纹识别吗?
不能。代理改变的是网络路由和对外显示的 IP 地址,不会改变浏览器的音频运算。浏览器的隐私设置可能会限制或标准化这些运算。
AudioContext 指纹是唯一的吗?
通常单独使用时并不唯一。多台设备可能产生相同结果,因此网站往往会将其与 Canvas、WebGL 和其他浏览器信号结合使用。