Device Fingerprinting
The ShieldLabs JS snippet uses MixVisit (@mix-visit/lite) to collect browser parameters. Shield.Core derives a stable DeviceID UUID from a subset of these components.
What is collected
Components sent in the encrypted snapshot payload include:Browser rendering
| Parameter | How collected |
|---|---|
canvas | Canvas 2D geometry, text, and winding test |
webgl / webGlBasics | WebGL vendor, renderer, version |
audio | AudioContext fingerprint (sampleRate, etc.) |
fonts | Available system fonts |
fontPreferences | Rendered font sizes across font families |
clientRects | Element bounding rect measurements |
Hardware & display
| Parameter | Source |
|---|---|
screenResolution | Screen dimensions |
screenFrame | Available screen frame offsets |
colorDepth, colorGamut, hdr | Display capabilities |
devicePixelRatio | Via navigator/screen |
hardwareConcurrency | CPU thread count |
architecture | CPU architecture bits |
touchSupport | Touch points and events |
Browser environment
| Parameter | Source |
|---|---|
navigator / platform | Platform, vendor, languages |
timezone | IANA timezone from MixVisit |
vendorFlavors | Browser type flags |
intl, math | Intl and Math fingerprint |
scheduling | Scheduler API |
Storage & APIs
| Parameter | Checks |
|---|---|
sessionStorage, localStorage | Storage API availability |
indexedDB, openDatabase | Database APIs |
cookiesEnabled | Cookie support flag |
batteryAPI, bluetoothAPI, networkAPI | Optional APIs |
Additional client signals (jsFeatures)
| Field | Purpose |
|---|---|
webrtcDisabled, webglDisabled, audioDisabled | Disabled APIs (headless/antidetect) |
isWebdriver | navigator.webdriver |
isIncognito | Incognito/private mode heuristics |
portScan | Chromium localhost port scan (antidetect/automation ports) |
How DeviceID is computed
Server-side in Shield.Core, stable MixVisit components are serialized and hashed:speechSynthesisVoices,baseLatency,storageQuota,computedStyleProperties
Port scanning (Chromium only)
On Chromium browsers, the snippet dynamically loadsportscanner.js and probes localhost ports for antidetect tools (AdsPower, Multilogin, etc.) and automation (CDP port 9222). Firefox/Safari skip port scan — only WebRTC-based signals apply.
What fingerprinting detects
Anti-detect browsers
- TCP OS fingerprinting: UA OS vs passive TCP stack (Shield.Tcp) — cannot be faked from JavaScript
- Port scan: localhost antidetect/automation ports (+60)
- Proxy timing signals: WebRTC TURN routed through proxy
Headless browsers
- WebRTC disabled →
JavaScript disabled (WebRTC)(+90) - Missing canvas/WebGL/audio components
navigator.webdriver = true- No STUN →
Stun is not checked(+30)
Privacy
ShieldLabs minimizes PII collection:- No name, email, or form data
- No browsing history URLs (only
entryUrlandreferrerof the protected page) - First-party
visitorIDcookie for persistent visitor tracking (see Identifiers) UserHIDmust be a hash you provide — never raw PII