它是什么
Web Audio API 可以不播放就渲染声音。一个振荡器经过压缩器后输出的波形,其精确采样值取决于音频引擎、操作系统和 CPU 的浮点行为——一个你听不见的指纹。
网站怎么读
const ctx = new OfflineAudioContext(1, 5000, 44100);
const osc = ctx.createOscillator(); osc.type = 'triangle'; osc.frequency.value = 10000;
osc.connect(ctx.createDynamicsCompressor()).connect(ctx.destination); osc.start();
const buffer = await ctx.startRendering(); // hash(buffer.getChannelData(0))渲染出的缓冲区被求和或哈希。某个系统上的 Chrome 会给出一个著名的数字(124.04347…),Firefox 给另一个;细微的偏差能把硬件范围缩得更小。
为什么它能认出你
这个值跨会话稳定、跨标签页一致,又独立于图形信号,因此能佐证它们。因为它是算出来而不是声明出来的,没法像字符串那样直接编辑。
风控怎么用它
两项行为测试占主导。0 Hz 的振荡器必须渲染出精确的零:任何其他结果都说明渲染之后被注入了噪声。getChannelData 与 createOscillator 必须仍是原生函数。一个独一无二却每次渲染都变的值,正是“保护”扩展的签名。
常见翻车点
每次调用都加随机噪声;对静音也加噪声;hook 掉 getChannelData;Chrome 环境里出现属于 Firefox 的音频值。
Mango 正在接受候补登记。以下介绍首发能力,客户端将在发放邀请后开放使用。
Mango Browser 如何处理
噪声对渲染采样施加带种子的确定性噪声;静音仍是静音,“零值测试”可通过。
检测你的值
跳转到你的检测结果中的这一项。