JavaScript Fingerprinting & Bot Detection: How Websites Identify You

1,316 views · likes · 16 shares
Share on
17 min read
JavaScript Fingerprinting & Bot Detection: How Websites Identify You

Key Takeaways

  • JavaScript fingerprinting collects 50+ browser characteristics to create a unique identifier, more persistent than cookies and harder to block.
  • Key fingerprinting signals include Canvas, WebGL, AudioContext, fonts, screen properties, and navigator API data.
  • Anti-bot systems combine JS fingerprinting with TLS fingerprinting (JA3/JA4) and behavioural analysis for highly accurate bot detection.
  • Headless browsers (Puppeteer, Playwright) and automation tools leave detectable traces that fingerprinting exposes, missing APIs, identical outputs, timing anomalies.
  • Spoofing fingerprints is possible but increasingly difficult, anti-bot systems use consistency checks that catch mismatched spoofed values.

Every time you visit a website, your browser silently reveals dozens of unique characteristics - your screen resolution, GPU model, installed fonts, audio processing quirks, and the exact way your browser renders invisible canvas elements. Combined, these signals create a browser fingerprint that's as unique as a human fingerprint.

This technology powers modern bot detection systems, fraud prevention, and anti-automation defences. Understanding how it works is essential whether you're defending your website from bots or trying to understand why certain security systems challenge your traffic.

What Is JavaScript Fingerprinting?

JavaScript fingerprinting is a technique that uses browser-side JavaScript APIs to collect device and environment characteristics, creating a unique identifier for each browser session. Unlike cookies (which users can delete) or IP addresses (which change), fingerprints are:

Uniqueness stats: Research by the EFF's Panopticlick project found that 83.6% of browsers have a unique fingerprint. When canvas fingerprinting is included, uniqueness exceeds 95%. Modern systems using 50+ signals achieve near-100% uniqueness across typical user populations.

How Browser Fingerprinting Works

A fingerprinting script typically runs in three phases:

  1. Collection: JavaScript APIs query browser properties - navigator object, screen properties, canvas rendering, WebGL capabilities, AudioContext processing, etc.
  2. Hashing: Collected values are combined and hashed (usually SHA-256 or MurmurHash3) into a compact fingerprint string
  3. Comparison: The hash is compared against known fingerprints - matching a previous visitor, a known bot tool, or a spoofed environment

Key Fingerprinting Signals

Canvas Fingerprinting

The most powerful fingerprinting signal. A hidden <canvas> element draws text, shapes, and gradients. The pixel-by-pixel output varies based on GPU, driver version, font rendering engine, and anti-aliasing implementation. Two different devices almost never produce identical canvas output.

WebGL Fingerprinting

WebGL exposes GPU information (renderer, vendor) and produces unique rendering output. The WEBGL_debug_renderer_info extension reveals the exact GPU model. Combined with WebGL rendering tests, this creates a strong hardware fingerprint.

AudioContext Fingerprinting

The Web Audio API processes audio signals differently on each device due to hardware and software differences. By generating an oscillator and analysing the output, fingerprinting scripts capture unique audio processing characteristics.

Font Fingerprinting

Different OS versions, language packs, and installed applications add unique font collections. By measuring the rendering width/height of text in various fonts, scripts determine which fonts are installed - creating a font-based fingerprint.

Navigator & Screen Properties

SignalWhat It RevealsEntropy
navigator.userAgentBrowser version, OS, device typeMedium (easily spoofed)
navigator.languagePreferred language(s)Low-Medium
navigator.hardwareConcurrencyCPU core countLow
navigator.deviceMemoryRAM amount (approximate)Low
screen.width/heightDisplay resolutionMedium
screen.colorDepthColour depth capabilityLow
navigator.platformOS platform stringLow (deprecated)
navigator.maxTouchPointsTouch capabilityLow
Intl.DateTimeFormat().resolvedOptions().timeZoneTime zoneMedium

Additional High-Value Signals

TLS Fingerprinting (JA3/JA4)

TLS fingerprinting operates at the connection level, before any JavaScript runs:

JA3 Fingerprinting

Created by Salesforce, JA3 hashes the TLS Client Hello message components: SSL version, ciphers, extensions, elliptic curves, and EC point formats. Each HTTP client (Chrome, Firefox, Python requests, Go http, curl) produces a unique JA3 hash. This identifies the actual client software even when user-agent headers are spoofed.

JA4 Fingerprinting

The newer JA4 standard improves on JA3 with a more human-readable format and better version tracking. It creates a fingerprint string like "t13d1715h2_8daaf6152771_b0da82dd1658" that encodes TLS version, cipher count, extension count, and ALPN values.

Why TLS fingerprinting is devastating for bots: Spoofing a TLS fingerprint requires modifying the TLS library at the C/C++ level, far more complex than changing user-agent strings. Most bot operators use Python, Go, or Node.js HTTP libraries that have distinctive JA3 hashes that instantly identify them as non-browser clients.

How Anti-Bot Systems Use Fingerprinting

Modern anti-bot solutions like Cloudflare Bot Management, Akamai Bot Manager, and DataDome combine fingerprinting with multiple detection layers:

  1. TLS fingerprint check: Verify the connection comes from a real browser, not an HTTP library
  2. JavaScript execution: Run fingerprint collection scripts, bots that can't execute JS are immediately flagged
  3. Consistency validation: Check that the JS fingerprint matches the TLS fingerprint (for example, if JA3 says Chrome but canvas says headless, flag it)
  4. Known bot comparison: Compare fingerprint against database of known bot tool signatures
  5. Behavioural overlay: Combine fingerprint score with mouse movement, click timing, and scroll patterns

Detecting Headless Browsers

Headless browsers (Chrome headless, Puppeteer, Playwright) leave telltale signs:

Fingerprint Spoofing & Anti-Detection

Several tools attempt to modify browser fingerprints:

ToolApproachDetection Risk
GoLoginCustom Chromium with configurable fingerprint profilesMedium
MultiloginMimic browser with deep fingerprint customisationMedium
Puppeteer Extra (Stealth)Plugin that patches detectable Puppeteer artefactsMedium-High
undetected-chromedriverModified ChromeDriver that avoids common detectionsMedium-High
Browser extensionsCanvas blocker, WebGL spoofingHigh (adds detectable artefacts)
The fundamental challenge of spoofing: Changing canvas output to match a different GPU requires perfectly simulating that GPU's rendering pipeline. Anti-bot systems test hundreds of micro-variations that are nearly impossible to spoof consistently. Inconsistency between spoofed values is often more detectable than the original fingerprint.

Defence Strategies for Website Owners

If you're protecting your website from bots, implement fingerprinting as part of a layered defence:

Privacy Implications

Browser fingerprinting raises significant privacy concerns. Major browsers are increasingly restricting fingerprinting capabilities:

Protect Your Website from Bot Attacks

Our security team implements comprehensive bot detection, fingerprinting, DDoS protection, and WAF configuration for websites and applications under attack.

Telegram: @unlednetwork →    WhatsApp Us →

Comments

Have a question or a first-hand experience with this? Join the conversation. Your email is never shown or shared.

    Maria S.

    We implemented this last month and already seeing positive signals.

    Author

    Thanks for the feedback. Based on our experience across hundreds of accounts, this approach shows results within 2-4 weeks.

Join the conversation

No HTML. Comments are moderated; they appear after review.

What You Get

High Trust Score

Pre-established account with positive activity history and cleared standing

Ready to Spend

Skip the warm-up phase - accounts are ready for immediate campaign launch

High Spend Ceiling

Elevated daily and monthly spend limits from day one

30-Day Replacement

Full replacement if account triggers suspension within 30 days

24h Delivery

Credentials delivered within 24 hours of payment confirmation

Dedicated Support

Direct Telegram/WhatsApp line to your account manager

WhatsApp Telegram