The WebAudio test is not the only measurement in these scripts. Inspection of the bundles found code that queries or measures:
canvas rendering and toDataURL()
WebGL renderer information, extensions, and shader precision
audio oscillator and analyser output
screen and viewport dimensions
device pixel ratio
hardware concurrency and device memory
installed browser plugins
supported audio and video formats
WebRTC behaviour
browser performance timing
mouse, touch, focus, and scroll events
device motion and orientation
properties commonly associated with browser automation
There is also code for serialising and encrypting results, making requests to Alibaba telemetry services, and sending data with fetch() or sendBeacon().
If it’s part of a fingerprinting lib, then they just fucked it up. Because the fingerprinting can be done in one ~16ms window of time when the script runs and then you can break down the audio objects and pretend nothing happened.
Not sure you need all this to play audio.
If it’s part of a fingerprinting lib, then they just fucked it up. Because the fingerprinting can be done in one ~16ms window of time when the script runs and then you can break down the audio objects and pretend nothing happened.
Also because browsers support OfflineAudioContext, which lets you do the same things but doesn’t try to output to speakers.
This guy fingerprints.
(hopefully in a good way)
Oh gods. I leave them everywhere 🤷