Browser fingerprinting tracks you without cookies. It builds a unique profile from your browser’s characteristics. screen resolution, fonts, canvas rendering, WebGL output, timezone, language, and dozens of other signals. that persists even after you clear cookies or use a VPN.
This guide covers the specific fingerprinting vectors, what each one exposes, and the techniques that actually reduce them.
Prerequisites
Before you begin, make sure you have the following ready:
- A computer running macOS, Linux, or Windows
- Terminal or command-line access
- Administrator or sudo privileges (for system-level changes)
- A stable internet connection for downloading tools
Step 1 - How Fingerprinting Works
Fingerprinting combines many data points to create a unique identifier:
// A simplified example of what fingerprinting scripts collect
const fingerprint = {
userAgent: navigator.userAgent,
screen: `${screen.width}x${screen.height}x${screen.colorDepth}`,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
language: navigator.language,
platform: navigator.platform,
hardwareConcurrency: navigator.hardwareConcurrency,
deviceMemory: navigator.deviceMemory,
canvas: getCanvasFingerprint(),
webgl: getWebGLRenderer(),
fonts: getInstalledFonts(),
audioContext: getAudioFingerprint()
};
No single property is unique. The combination is. A 2023 study found that combining just 8-12 properties identified 99%+ of browsers uniquely.
Step 2 - Test Your Current Fingerprint
Before making changes, establish a baseline:
https://coveryourtracks.eff.org. EFF’s fingerprint testhttps://browserleaks.com. detailed breakdown of each fingerprint vectorhttps://amiunique.org. shows how unique your browser is across their dataset
Note your uniqueness score, then test again after each change to see improvement.
Step 3 - Vector 1: Canvas Fingerprinting
Canvas fingerprinting asks your browser to draw text/shapes on an invisible canvas. Subtle differences in font rendering, anti-aliasing, and GPU compositing produce a value unique to your browser+OS+hardware combination.
What It Looks Like in Practice
function getCanvasFingerprint() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.textBaseline = 'top';
ctx.font = '14px Arial';
ctx.fillText('Browser fingerprint: ', 2, 2);
return canvas.toDataURL();
}
Protections
Tor Browser - Randomizes canvas output per session. returns noise instead of true rendering.
Firefox with privacy.resistFingerprinting:
Open about:config and set:
privacy.resistFingerprinting = true
This enables Firefox’s fingerprinting resistance mode, which includes canvas randomization.
Canvas Blocker extension (Firefox/Chrome): Blocks or randomizes canvas API responses.
Brave Browser - Reports a randomized canvas fingerprint per site per session.
Step 4 - Vector 2: WebGL Fingerprinting
WebGL exposes your GPU model and renderer string. a specific combination that narrows down hardware considerably.
const gl = document.createElement('canvas').getContext('webgl');
const renderer = gl.getParameter(gl.RENDERER);
// Returns something like: "ANGLE (NVIDIA, NVIDIA GeForce RTX 3080, OpenGL 4.5.0)"
Protections
- Firefox
privacy.resistFingerprinting: Spoofs WebGL info to a generic value - Tor Browser: Built-in protection
- Brave: Randomizes WebGL info per session
- Manual: Use a browser extension that intercepts
getParameter()calls
In Firefox about:config:
webgl.disabled = true # Disables WebGL entirely (breaks some sites)
webgl.enable-webgl2 = false # Disables WebGL 2 specifically
Step 5 - Vector 3: Font Enumeration
Your browser can be asked to measure text rendered in various fonts. If a font is installed, the text dimensions differ from the fallback font. This reveals which fonts you have installed. a stable, OS-dependent fingerprint.
// Font detection via canvas measurement
function isFontAvailable(font) {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const baseline = ctx.measureText('mmmmmmmmmmlli').width;
ctx.font = `72px ${font}, monospace`;
return ctx.measureText('mmmmmmmmmmlli').width !== baseline;
}
Protections
- Firefox
privacy.resistFingerprinting: Reports a limited, consistent font set - Tor Browser: Restricts available fonts to a standard list
- Brave: Randomizes font metrics
There is no good way to install many custom fonts while preventing fingerprinting. If privacy matters, use a browser with built-in resistance rather than trying to manage fonts manually.
Step 6 - Vector 4: Audio Context Fingerprinting
The Web Audio API processes audio through your hardware. Tiny differences in floating-point operations produce a unique value per device.
function getAudioFingerprint() {
const audioCtx = new AudioContext();
const oscillator = audioCtx.createOscillator();
const analyser = audioCtx.createAnalyser();
oscillator.connect(analyser);
analyser.connect(audioCtx.destination);
oscillator.start(0);
const data = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(data);
return data.slice(0, 10).join(',');
}
Protections
- Firefox
privacy.resistFingerprinting: Adds noise to Audio API output - Tor Browser: Same protection built in
- Brave: Randomizes audio context values per session
Disable Audio API entirely (breaks audio on some sites):
In Firefox about:config:
media.webaudio.enabled = false
Step 7 - Vector 5: Timezone and Language
Your system timezone and browser language are stable identifiers that correlate with your location.
Intl.DateTimeFormat().resolvedOptions().timeZone // "America/New_York"
navigator.language // "en-US"
navigator.languages // ["en-US", "en"]
Protections
In Firefox with privacy.resistFingerprinting:
- Timezone is reported as UTC
- Language is reported as
en-USregardless of actual setting
For manual control without privacy.resistFingerprinting:
javascript.options.wasm = false # Doesn't help with timezone
Better approach - use a browser profile with privacy.resistFingerprinting enabled, or use Tor Browser for sensitive browsing.
Step 8 - Vector 6: Hardware and Browser Properties
navigator.hardwareConcurrency // Number of CPU cores
navigator.deviceMemory // RAM in GB
screen.width, screen.height // Screen resolution
screen.colorDepth // Color depth
These are stable across sessions. Many users have 4-16 CPU cores, 8-32GB RAM, and standard screen resolutions. but the combination narrows things.
Protections
- Firefox
privacy.resistFingerprinting: Reports hardwareConcurrency as 2, deviceMemory as 8 - Tor Browser: Reports standard values
Step 9 - Which Browser Provides the Best Protection?
Tor Browser
Best fingerprinting resistance available. Uses fingerprinting resistance by design. everyone who runs Tor Browser looks the same (the “crowd” approach). Limitations - slow, not for everyday use.
Firefox with Hardening
With privacy.resistFingerprinting = true plus the following about:config settings:
privacy.resistFingerprinting = true
privacy.resistFingerprinting.block_mozAddonManager = true
privacy.trackingprotection.fingerprinting.enabled = true
privacy.trackingprotection.enabled = true
geo.enabled = false
media.navigator.enabled = false
webgl.disabled = false # Keep enabled. disabling it is itself a fingerprint
dom.battery.enabled = false
dom.vibrator.enabled = false
This provides strong protection without being as restrictive as Tor Browser.
Brave Browser
Brave’s “Shields” fingerprinting protection is on by default. It randomizes fingerprint vectors per site per session rather than trying to match a crowd. Effective, but the randomization approach means your fingerprint is inconsistent, not invisible.
Go to brave://settings/shields to configure:
- Fingerprinting blocking: “Block fingerprinting” (default). use “Strict” for sensitive browsing
Chrome and Edge
No meaningful fingerprinting protection. Do not use these for privacy-sensitive browsing.
Step 10 - Test After Hardening
After applying protections, re-run the fingerprint tests:
Use curl to check what basic browser info you expose without JavaScript
curl -s -A "Mozilla/5.0" https://browserleaks.com/user-agent | grep -i "unique"
Or run a headless browser test
npx playwright chromium --screenshot https://coveryourtracks.eff.org screenshot.png
Visit https://coveryourtracks.eff.org and look for:
- “Strong protection against Web tracking”. indicates fingerprinting resistance is working
- Randomized canvas hash. changes on each page reload if protection is active
Step 11 - Realistic Expectations
No browser is completely un-fingerprintable on the open web. The goal is to:
- Blend into a larger crowd (Tor Browser approach)
- Break the stability of the fingerprint so tracking across sessions fails (Brave approach)
- Reduce the number of unique signals so fingerprint confidence is lower
Combining good browser choice with a VPN or Tor removes the network-layer correlation that would otherwise link your anonymized fingerprint to your real IP.
Troubleshooting
Configuration changes not taking effect
Restart the relevant service or application after making changes. Some settings require a full system reboot. Verify the configuration file path is correct and the syntax is valid.
Permission denied errors
Run the command with sudo for system-level operations, or check that your user account has the necessary permissions. On macOS, you may need to grant terminal access in System Settings > Privacy & Security.
Connection or network-related failures
Check your internet connection and firewall settings. If using a VPN, try disconnecting temporarily to isolate the issue. Verify that the target server or service is accessible from your network.
Frequently Asked Questions
Who is this article written for?
This article is written for developers, technical professionals, and power users who want practical guidance. Whether you are evaluating options or implementing a solution, the information here focuses on real-world applicability rather than theoretical overviews.
How current is the information in this article?
We update articles regularly to reflect the latest changes. However, tools and platforms evolve quickly. Always verify specific feature availability and pricing directly on the official website before making purchasing decisions.
Are there free alternatives available?
Free alternatives exist for most tool categories, though they typically come with limitations on features, usage volume, or support. Open-source options can fill some gaps if you are willing to handle setup and maintenance yourself. Evaluate whether the time savings from a paid tool justify the cost for your situation.
Can I trust these tools with sensitive data?
Review each tool’s privacy policy, data handling practices, and security certifications before using it with sensitive data. Look for SOC 2 compliance, encryption in transit and at rest, and clear data retention policies. Enterprise tiers often include stronger privacy guarantees.
What is the learning curve like?
Most tools discussed here can be used productively within a few hours. Mastering advanced features takes 1-2 weeks of regular use. Focus on the 20% of features that cover 80% of your needs first, then explore advanced capabilities as specific needs arise.
Related Articles
- Tor Browser Screen Size Fingerprint Protection
- Tor Browser Canvas Fingerprinting Protection
- Tor Browser Fingerprinting Protection How It Makes Everyone
- Tor Browser Font Fingerprinting Protection
- Css Fingerprinting Techniques How Stylesheets Can Track You
- AI Coding Assistant Session Data Lifecycle
Built by theluckystrike. More at zovo.one