Learn how browser fingerprinting works through Canvas, WebGL, and audio signals, and how to detect and reduce fingerprint tracking with BrowserInsight.
What is Browser Fingerprinting?
Browser fingerprinting is a technique that identifies and tracks users by collecting characteristics of their browser and device rather than storing an identifier on it. The W3C's own fingerprinting guidance draws a distinction standards bodies use when deciding what to mitigate: passive fingerprinting reads information a browser exposes automatically, like headers and screen size, while active fingerprinting requires a script to probe an API — Canvas, WebGL, AudioContext — and observe how it responds. (See MDN's glossary entry for the short version.) That split matters because it shapes which signals browser vendors can gate behind a permission prompt, versus which ones are baked into how the platform behaves by default. Unlike traditional cookies, browser fingerprinting doesn't require storing any data on the user's device, so websites can still identify the same user even after they've cleared their browser data — see Persistent Visitor IDs: Surviving Incognito, VPNs & Cache Clears for why clearing cookies, going incognito, or switching on a VPN doesn't reset an ID built this way.
How Browser Fingerprinting Works
When you visit a website, your browser automatically sends a wealth of information to the server, including:
- User-Agent: Browser type, version, and operating system information
- Screen Resolution: Display size and color depth
- Timezone: Device's local time settings
- Installed Fonts: List of fonts available on the system
- Canvas Fingerprinting: Subtle differences in graphics rendered via HTML5 Canvas across different devices
- WebGL Fingerprinting: Graphics card and driver information
- Audio Fingerprinting: Audio processor characteristics
- Layout Geometry: Sub-pixel element and text positions, read via plain DOM layout APIs — see ClientRects fingerprinting
- Media Devices: Counts, IDs, and (once permitted) model labels of cameras/microphones via
enumerateDevices()— see Media Devices Fingerprinting - Installed Voices: Text-to-speech voices exposed via
speechSynthesis.getVoices(), no permission required — see Speech Synthesis Fingerprinting - CSS Media Queries: Preference/hardware signals like
prefers-color-schemeand installed fonts, leaked with no JavaScript at all — see CSS Fingerprinting - Permission States: Which permission names
navigator.permissions.query()recognizes and whether each isgranted/denied/prompt, checkable with no dialog shown — see Permissions API Fingerprinting - Plugin List:
navigator.pluginsis now hard-coded by spec to one of two fixed states, but a mismatch withnavigator.pdfViewerEnabledor the claimed browser still exposes automation and tampering — see navigator.plugins Fingerprinting - Network Information: Coarse connection stats (
effectiveType,downlink,rtt) fromnavigator.connection, Chromium-only — see Network Information API Fingerprinting - Keyboard Layout: Your OS's physical key layout via
navigator.keyboard.getLayoutMap(), Chromium-only — see Keyboard Layout Fingerprinting - Battery Status: Charge/charging-time estimates, once readable with no prompt — Firefox and Safari dropped it after re-identification research; see The Battery Status API
- HTTP Headers:
Accept,Accept-Language, andAccept-Encodingheaders, read before any JavaScript runs — see Fingerprinting Without JavaScript
Studies of browser fingerprinting have found that combining enough of these signals makes the large majority of browsers uniquely identifiable. In practice, your browser fingerprint can be nearly as distinctive as a real-world fingerprint.
Each signal on its own is weak — plenty of people share your screen resolution or timezone. Fingerprinting works because these values are largely independent, so combining them multiplies their distinctiveness. In information-theory terms, every attribute adds a few bits of entropy, and once the combined entropy passes roughly 33 bits a browser becomes effectively unique among everyone on Earth — a threshold first demonstrated at scale by the EFF's Panopticlick study (Eckersley, 2010) and confirmed by later research such as Laperdrix et al. A common mix of user-agent, font list, canvas, and WebGL often clears that bar on its own. See Browser Fingerprint Entropy and Anonymity Sets Explained for how those bits sum up and what the resulting "1-in-X" anonymity set actually means for you.
WebRTC is a related but separate risk — in two different ways. Its best-known problem is a network leak that can expose your real IP address even behind a VPN; see WebRTC Leak Protection for how to test for and close it. Separately, WebRTC also exposes its own small fingerprinting surface through supported codecs and SDP structure, unrelated to your IP — see WebRTC Fingerprinting for how that signal works and why fixing the leak doesn't fix it.
These signals don't carry the same weight on every device. Mass-produced phone hardware flattens canvas, WebGL, and font entropy compared to the huge variety of desktop PC configurations — but screen geometry, touch points, and motion sensors add signals desktops mostly lack. See Mobile Browser Fingerprinting for how Android and iOS devices get tracked specifically.
Timezone and language deserve special mention because they double as region signals, not just device signals — a service that wants to know which country you're really connecting from can compare your reported timezone and language against your IP's geolocation, and a VPN that changes only the IP leaves that contradiction exposed. See How Apps Detect Your Real Region Despite a VPN for how that specific check works.
Canvas Fingerprinting in Detail
Canvas fingerprinting draws hidden text and shapes onto an HTML5 <canvas> element, reads back the rendered pixels, and hashes them — subtle differences in GPU, drivers, and rendering engine make that hash vary by device even when the drawing code is identical. It stays one of the most widely used fingerprinting signals because it needs no permission prompt and runs in a few milliseconds. For the exact draw operations that maximize entropy, real example code, and how to read your own canvas hash, see Canvas Fingerprint Detection: How Websites Identify Your Device.
WebGL Fingerprinting
WebGL fingerprinting reads two different things from your GPU: dozens of reported parameters — including, via the WEBGL_debug_renderer_info extension, the unmasked GPU vendor and renderer strings — and a hash of pixels from an off-screen rendered test scene, which varies with driver-level floating-point and anti-aliasing differences. Because both come from hardware and drivers rather than a setting you can flip, WebGL is one of the stickiest signals to defend against, and the renderer string can even reveal your operating system — a Direct3D backend token, for instance, can only come from Windows — which is why some GPU/OS pairings are not just rare but physically impossible and get flagged instantly. For the full API walkthrough, example code, and defense options, read the WebGL fingerprinting deep dive.
What's Changed at the Platform Level
The fingerprinting surface is not fixed — browser vendors have spent years shrinking it, but along two very different lines. Which line your browser follows decides what a script can still read from you, so it is worth knowing which one you are on.
Chromium: trim the passive surface, gate the rest
User-Agent Reduction trims the User-Agent string every request sends by default down to a low-detail stub, freezing the minor version number and dropping OS/device specifics that used to be readable with no script running at all. See Chrome's own User-Agent Reduction documentation for exactly which fields were frozen, and our breakdown of what changed and why for the spoofing-detection implications. The detail that used to sit in the passive UA string didn't disappear — it moved behind User-Agent Client Hints, an opt-in API a site must explicitly request rather than receive automatically. That's the general direction of Chrome's Privacy Sandbox initiative: treat fingerprinting surface as something to be actively suppressed or gated behind a request, rather than left passively broadcast. Again, this is Chromium's direction, not the web's.
Firefox and Safari: block the script, standardize the answer
Neither Firefox nor Safari implements User-Agent Client Hints, and neither treats "make the site ask for it" as the fix. Mozilla's route is to block the collector rather than reshape the signal: Firefox's Enhanced Tracking Protection blocks scripts on a known-fingerprinter list by default, and privacy.resistFingerprinting is there for users who want Tor Browser's stricter tactic of handing back standardized values instead. Apple states its position outright in the WebKit Tracking Prevention Policy, which classifies fingerprinting as "stateless tracking", commits WebKit to preventing all covert tracking, and adds that where a technique can't be fully prevented WebKit will limit it by "reducing the available bits of entropy" — the same bit-counting from the entropy section above, adopted as vendor policy.
The practical consequence: "how identifiable am I?" has no single answer, because the answer belongs to a specific browser rather than to you. That is the case for measuring it yourself rather than assuming.
How to Read Your Own Fingerprint
The best way to understand your exposure is to look at your own fingerprint. BrowserInsight's fingerprint check runs entirely in your browser — no fingerprint data is ever sent to a server (IP lookups are handled by a separate tool) — and shows you:
- Your Canvas and WebGL hash values, and whether they look common or rare
- Your full WebGL renderer string and the GPU it reveals
- Detected audio fingerprint characteristics
- The complete set of headers and JavaScript-exposed attributes a tracker can read
- An anonymity score that estimates how unique your current setup is, with concrete suggestions
Run the check once in your normal browser, then again with a privacy browser or an extension enabled, and compare the scores. That before-and-after is the fastest way to see which defenses actually move the needle for your device — because the answer differs from one machine to the next. For a structured, point-by-point way to run that comparison, see Browser Fingerprint Consistency: A Self-Check Checklist.
How to Protect Your Browser Fingerprint
No single switch makes you anonymous, and the available defenses follow two opposite philosophies: look like everyone else (uniformity) or look different every time (randomization). Understanding which one a tool uses helps you avoid combining them in ways that backfire.
1. Use Privacy-Focused Browsers
The Tor Browser takes the uniformity approach: it standardizes screen size, fonts, canvas, and WebGL output so that all Tor users look nearly identical, putting you inside one large crowd instead of leaving you visible against it. Brave takes the randomization approach — its "farbling" injects tiny noise into canvas, WebGL, and audio readings, seeded per site and per session, so each site sees a different value and those values change from one session to the next. Firefox offers privacy.resistFingerprinting (RFP), which borrows Tor's uniformity techniques and ships enabled by default in Tor Browser itself. They reduce fingerprintability in different ways, but they share the key trait of altering the high-entropy rendering signals — which is exactly where it matters most.
2. Use Browser Extensions
Several browser extensions can help defend against fingerprint tracking:
- CanvasBlocker: Blocks or spoofs Canvas fingerprints
- Privacy Badger: Automatically blocks trackers
- uBlock Origin: Blocks ads and tracking scripts
Be selective, though: extensions run with broad access to every page you visit, and a careless or malicious one can itself become a tracking vector. See Browser Extension Privacy Risks before installing anything new.
3. Disable JavaScript
Disabling JavaScript removes every active signal at once — canvas, WebGL, audio, and font probing all need a script to run — at a heavy cost to how much of the web still works. Extensions like NoScript let you re-enable it per site. Note what this does not cover: the passive layer survives untouched. Your HTTP headers are read before a single line of script executes, and CSS alone still leaks preferences, hardware traits, and installed fonts. Turning JavaScript off shrinks your fingerprint; it does not delete it.
4. Use Separate Virtual Machines
A virtual machine changes the layer the strongest signals actually come from — a different guest OS, GPU driver stack, font set, and screen geometry produce a genuinely different canvas hash and WebGL renderer string, so per-VM activity is hard to correlate.
Browser containers and separate browser profiles are a common point of confusion here: they isolate storage — cookies, localStorage, site data — which is real protection against cookie-based tracking, but they do nothing about the fingerprint. Your GPU, fonts, screen, and timezone are identical in every container, so a fingerprinting script sees one device across all of them. Use containers to keep logins apart, not to keep identities apart.
The Anti-Fingerprinting Paradox
There is a catch worth understanding: a rare or aggressively-customized defense can make you more identifiable, not less. If you are the only visitor running a particular spoofing extension with an unusual user-agent, that very combination becomes a distinctive fingerprint of its own — the same trade-off EFF's own Cover Your Tracks tool surfaces when a privacy extension makes a uniqueness score worse, not better; see Cover Your Tracks: What Your Uniqueness Score Doesn't Prove for why that happens and what the score does and doesn't mean. This is why uniformity tools like Tor and Firefox RFP try to place you in a large, identical crowd rather than make you exotic — and why piling on many bespoke tweaks often hurts more than it helps. As a rule, favor the well-trodden default configuration of a privacy browser over a hand-assembled stack of extensions. Anti-detect browsers — tools that substitute entire fingerprint profiles — push this paradox further: the spoofing pattern itself becomes a signature, as explored in How Sites Detect Anti-Detect Browsers and Fingerprint Spoofing. For a rundown of the specific signals — TLS, canvas noise, fonts, UA-CH, and more — that let detectors tell a spoofed profile from a real device, see Anti-Detect Browser vs Real Browser: 12 Signals Detectors See.
Legitimate Uses of Browser Fingerprinting
While browser fingerprinting is often used for advertising tracking, it also has legitimate uses:
| Use Case | Description |
|---|---|
| Security | Detecting abnormal account logins and preventing fraud |
| Anti-Bot | Identifying and blocking automated programs |
| UX Optimization | Optimizing web display based on device characteristics |
| Copyright Protection | Tracking content leak sources |
The anti-bot case is the most technically involved of these — see Bot Detection Techniques for how sites separate automated traffic from real visitors, often using the very same fingerprinting signals.
Frequently Asked Questions
Is browser fingerprinting the same as cookies?
No. Cookies are small files stored on your device that you can view, block, or delete. A fingerprint is derived from your browser and device characteristics — nothing is stored on your side, so clearing cookies or switching to a fresh browser profile does not reset it. That is exactly what makes fingerprinting harder to escape than cookie-based tracking. A separate technique, bounce tracking, sidesteps cookie blocking a different way — by briefly making a tracker's own domain first-party during a redirect — without touching any of your device's characteristics at all. Another cookie-free approach hides in the HTTP cache itself: see ETag and Cache Supercookies for how a server can turn ordinary cache revalidation into a tracking identifier.
Can incognito or private mode prevent fingerprinting?
Mostly no. Private mode stops your browser from saving history, cookies, and site data locally, but it does not change the characteristics a fingerprint is built from — your screen size, fonts, canvas output, and GPU look the same in a private window. Sites can often still recognize you across normal and private sessions. Some sites can even tell you're in a private window at all — see How Websites Detect Incognito and Private Browsing Mode for the storage-API tricks behind it.
Which part of a browser fingerprint is most identifying?
It varies, but the rendering signals — canvas and WebGL — are usually the hardest to change, because they come from your GPU and drivers rather than a setting you can flip. That makes them the highest-value targets for defenses: blocking or randomizing canvas and WebGL output removes more uniqueness than tweaking your user-agent or timezone. BrowserInsight shows which signals contribute most for your own browser, so you know where your effort is best spent.
Does a VPN stop browser fingerprinting?
No. A VPN changes your IP address and apparent location, but a fingerprint is computed from your browser and device, not your network — you still look identical from any IP. A VPN does help with the separate problems of IP-based tracking and WebRTC leaks, but it does nothing about the fingerprint itself. A related but distinct technique worth knowing is TLS fingerprinting, which identifies your client software from the TLS handshake rather than from browser APIs — and also survives a VPN tunnel.
Conclusion
Browser fingerprinting is a powerful, stealthy tracking technique built from characteristics of your browser and device rather than anything stored on it. Understanding how it works — and which signals actually move the needle — is the first step toward controlling your exposure. Complete anonymity online is difficult to achieve, but the defenses above get you a long way, and you can only tell which of them helped by measuring. Start with a free fingerprint check — it runs entirely in your browser, sends nothing to a server, and takes a few seconds.
Recommended Reading:
- resistFingerprinting Explained: Firefox and Tor Browser
- Fingerprint Consistency: Why Mismatched Signals Get You Flagged
- Mobile Browser Fingerprinting: How Android and iOS Get Tracked
- WebRTC Leak Protection: A Must-Read for VPN Users
- WebRTC Fingerprinting: How Codecs and SDP Reveal Your Browser
- ClientRects Fingerprinting: Sub-Pixel Layout as an Identifier
- Media Devices Fingerprinting: What enumerateDevices Leaks
- Speech Synthesis Fingerprinting: Installed Voices as a Signal
- CSS Fingerprinting: Tracking Without JavaScript
- Permissions API Fingerprinting: How Permission States Track You
- Canvas Fingerprint Detection: How Websites Identify Your Device
- Audio Fingerprinting: How AudioContext Identifies Your Device
- Font Fingerprinting: How Installed Fonts Expose You
- Keyboard Layout Fingerprinting: The getLayoutMap Signal
- Bounce Tracking Explained: Redirects That Track Without Cookies
- Network Information API Fingerprinting: downlink & RTT
- The Battery Status API: A Privacy Cautionary Tale

