Abstract digital illustration of a fingerprint composed of computer code and pixels, representing canvas fingerprinting technology.

Canvas Fingerprinting Test:Block Browser Tracking Without Cookies

2025-12-26•root

Introduction

Canvas fingerprinting lets a website recognise your browser without storing anything on your device. A script draws a small hidden image, usually a line of text, a few emoji and a shape, reads the pixels back and turns them into a short hash. The same computer draws the same pixels every time, and a computer with a different graphics stack usually does not, so the hash works as an ID that survives clearing cookies, a Chrome Incognito window and a VPN.

A canvas fingerprinting test runs the same drawing in the open and shows you the result. One test page can tell you whether your browser hands out the same drawing every time it is asked. Whether you are unique on the web would take data about everyone else. Brave, Firefox, Safari and Tor Browser each handle the drawing differently, and each approach costs something.

If a test shows the same canvas hash every time, any site can recognise your browser by it. Chrome leaves the drawing as it is, Brave changes it by default, Safari changes it in private windows, Firefox varies the exported file from site to site, and a VPN never helps.


What Is Canvas Fingerprinting, in One Paragraph

The HTML <canvas> element is a drawing surface for scripts: charts, games, photo editors and map tiles all use it. Whatever a page draws on a canvas, it can also read back. Keaton Mowery and Hovav Shacham described the attack in 2012 in "Pixel Perfect: Fingerprinting Canvas in HTML5": render text and graphics, examine the pixels, and run a cryptographic hash over them to get "a short, convenient fingerprint". The result is identical across runs on one machine and differs across hardware and software configurations. It is invisible to the user and stores nothing on the device. Privacy tests call a drawing that any page can read back unchanged a canvas leak.


How a Canvas Fingerprint Test Works

Draw, read back, hash

A typical script creates a canvas that is never attached to the page, so it never appears on screen. It fills a background, writes a line of text in a common font, adds emoji, blends overlapping colours and draws a shape. Each step exercises a different part of the rendering pipeline. The script then reads the image back, as raw pixel values through getImageData() or as an encoded PNG through toDataURL(), and hashes it. The HTML standard limits reading back only when the canvas holds an image from another origin, so text and shapes the script drew itself are always readable. That hash is the canvas hash, and it is only a label: two machines that draw identical pixels get the same hash, and a single changed pixel produces a completely different one.

Why two computers draw the same text differently

Browsers lean on the operating system and the graphics hardware to draw quickly and to make text look native, so the pixels depend on the machine underneath:

  • Mowery and Shacham drew the same sentence in a web font that every visitor downloaded from the same server, so the font file was identical for everyone. The renderings still differed, grouped by operating system and browser family, and the authors concluded that such differences "must be a direct consequence of the font engine used to render the text".
  • Between machines on the same platform, the paper found differences along the outline of each letter and traced them to anti-aliasing and subpixel hinting such as ClearType. Across platforms, kerning differed enough that the same sentence came out at different lengths.
  • A font name like Arial can resolve to different files, or to a metric-compatible substitute, depending on the system. Emoji differ even more, because each operating system ships its own colour emoji font.
  • Chrome draws canvas through Skia, its graphics library, which can use the GPU, and the paper describes its fingerprint as one that "measures graphics driver and GPU model".
  • A new browser release can change how text or shapes are rasterised, so the hash can move after an update on the same machine.

Installed fonts matter less than older guides suggest: a font you installed changes the canvas only if the drawing asks for it or falls back to it. Detecting installed fonts is a separate technique.

What the hash identifies

A canvas hash identifies a configuration: operating system, browser version, fonts, GPU and driver. Two identical company laptops built from the same image can share it, which is why a canvas value is rarely used alone. It goes into a larger fingerprint together with screen size, time zone, languages, the WebGL renderer string, the audio stack and speech-voice list, and the IP address. Brave's documentation explains what that means for defence: fingerprinters "hash together a large number of semi-identifiers into a single identifier, since randomizing just one value 'poisons' the entire fingerprint."


What It Exposes, and Who Reads It

A stable canvas value lets a site recognise a returning browser after you clear cookies. A VPN does not change the pixels, and neither does Chrome's Incognito mode, because both leave the graphics stack alone. Private windows in Firefox and Safari behave differently: both browsers switch on their fingerprinting protections there by default.

Canvas fingerprinting by third parties

The larger risk comes from third-party scripts. An advertising, analytics or fraud-prevention script that runs on many sites computes the same canvas hash on each of them, so it can link your visits across those sites without a shared cookie. Most browser defences aim at exactly this case:

  • Firefox has blocked third-party requests to known fingerprinting companies by default since Firefox 72 (January 2020), using Disconnect's lists.
  • Brave gives embedded third-party frames and scripts the randomisation seed of the top-level site, so one tracker gets a different value on every site you visit.
  • Safari 26 prevents known fingerprinting scripts from reliably reading 2D canvas, web audio and other device details, in all browsing.
  • Chrome's Incognito mode has Script Blocking, which stops scripts from domains on Google's Masked Domain List from running in third-party contexts. It does not change what canvas returns.

When Google said it would no longer prohibit organisations using its advertising products from fingerprinting, starting 16 February 2025, the UK Information Commissioner's Office replied that "fingerprinting is not a fair means of tracking users online because it is likely to reduce people's choice and control", and that data protection law, including PECR, applies to it.

Fraud prevention and bot detection read the same signals to compare a device with the one seen last time and with what the browser claims to be, as fake browser detection describes.


How to Test for a Canvas Leak

A canvas leak test shows whether a page can read the same drawing from your browser every time. Test pages such as the canvas page on BrowserLeaks show your canvas hash. The Canvas Fingerprint card in the Browser Uniqueness group of the Privacy & Trust Index is a canvas fingerprint check that also tells you whether your browser, or a tool inside it, changes, hides or blocks the drawing. It reports one of five states:

ResultWhat the card foundWhat it means
Canvas LeakYour browser returned the same drawing each time.Sites can use the drawing as a stable ID without cookies. Lowers the Privacy score, by the amount on the card's badge.
Identity ShiftingThe drawing changed between reads.Trackers cannot lock onto one image. No penalty.
ProtectedYour browser adds light noise to the drawing.The drawing cannot serve as a stable ID. No penalty.
Canvas InterceptedA privacy tool is handling the canvas.Your real drawing stays on your device. No penalty.
Canvas BlockedThe canvas is turned off.Nothing to fingerprint. No penalty.

When the drawing is stable, the Graphics & Media Fingerprint panel below the cards shows a short hash of it with a Persistent tag, next to the WebGL renderer your browser reports.

The card affects only the Privacy score. Hiding your canvas is a legitimate privacy choice, so no canvas result ever lowers the Trust score. Contradictions between what a browser claims and what its hardware shows belong to the device integrity checks, which compare several signals before they judge.

What one visit cannot tell you

The card makes no claim that you are unique, because that would take a population database. Pages that print a uniqueness percentage compute it from their own visitors. In Firefox the card shows Canvas Leak unless resistFingerprinting is on. Since version 151 Firefox varies the exported image by site and by session in every window, so a tracker that hashes the exported file gets a different value on each site. The pixels underneath stay the same, though, and a script that reads them directly still gets one stable value. To watch the first part work, note the hash, restart the browser and run the scan again: a different hash means Firefox is varying the export. Brave's documentation recommends the same kind of check: note the canvas value, repeat in a private window, after a restart and in another profile, and expect a different value each time.


Canvas Fingerprinting Protection in Each Browser

Browsers use three strategies. Randomisation changes the pixels slightly so the value cannot be linked across sites or sessions. Uniformity makes every user return the same value. Blocking withholds the real image. Current browsers use them like this:

BrowserStrategyWhat a page reads back
BraveRandomisation (farbling), on by defaultThe real drawing, slightly altered. Same for one site in one session, different elsewhere.
Firefox 151 and later, every windowVaried export (Efficient Canvas Randomization)The real pixels. Only the exported file differs, by site and by session.
Firefox with resistFingerprinting, Tor BrowserBlocking with a permission promptA placeholder image unless you allow the site. Third parties never get the real one.
SafariNoise in private browsing, script restrictions everywhereNoised pixels in private windows. Known fingerprinting scripts are restricted in all windows.
ChromeNo canvas protectionThe real drawing, in normal and Incognito windows alike.

Brave: farbling

Brave calls its approach farbling: slightly randomising the output of fingerprintable APIs, canvas readback among them, in a way meant to be invisible to people and harmless to ordinary sites. The seed changes per session, per site (eTLD+1) and per storage area. A site gets the same value every time it asks during one session, another site gets a different one, and the same site gets a new one in the next session. Brave retired its separate Strict mode on desktop and Android in version 1.64 and kept the standard protection as the default, so in Shields it is now a single fingerprinting setting. Since version 1.93 (August 2026) it also reports one generic WebGL vendor and renderer string for all its desktop and Android users, closing the GPU model leak next to canvas.

Firefox: Fingerprinting Protection and resistFingerprinting

Firefox has three layers. In every window, Enhanced Tracking Protection blocks third-party requests to known fingerprinting companies. Since Firefox 151 (May 2026), every window also gets Efficient Canvas Randomization. It leaves the pixels alone and changes only the exported image file, which carries a small extra block derived from the site and the browsing session. A hash of the exported file therefore differs from site to site, while a script that reads the pixels back gets the same values everywhere. Private windows, and all windows when Enhanced Tracking Protection is set to Strict, add Fingerprinting Protection, whose canvas randomisation is designed to nudge a few colour values by the smallest possible step. In Firefox 151 that pixel noise does not run while the lighter mode is active. Mozilla's bug tracker records the gap and is holding the fix, because the noise caused visible artefacts on sites such as Google Maps.

The third layer is the privacy.resistFingerprinting preference. It turns on every protection on Firefox's list, including reporting UTC as the time zone, which can create the kind of clock mismatch that other checks notice. For canvas, it asks your permission before a site can extract image data, blocks extraction by third parties outright, and otherwise hands the page a placeholder image instead of the drawing. With it on, the packet.guru card shows Protected.

Tor Browser: one look for everyone

Tor Browser builds on Firefox's resistFingerprinting and blocks canvas image extraction the same way. It aims for uniformity, though the Tor Project's support pages admit that "it is practically impossible to make all Tor Browser users identical", so the goal is fewer distinguishable groups for each trait. For the same reason Tor Browser does not let users pick which operating system to appear as: any such choice "would only make users more unique".

Safari: noise and script restrictions

Safari 17 introduced Advanced Fingerprinting Protection, on by default in Private Browsing and available for all browsing. In WebKit's words, Safari "applies tiny amounts of noise to pixels on the canvas that have been painted using drawing commands", only where drawing happened and small enough not to produce visible artifacts. Safari 26 added a second layer for every window: known fingerprinting scripts can no longer reliably read 2D canvas, web audio, the list of speech voices, screen dimensions and other device details. That layer targets scripts on a list. A canvas test page that is not on it can still read the drawing in a normal window, so in Safari a test tells you the most when you run it in a private window.

Chrome and extensions

Chrome has no built-in canvas protection. Incognito Script Blocking stops listed fingerprinting domains in third-party contexts, but any script that does run reads the real pixels. Canvas blocker extensions for Chrome replace the canvas functions inside the page with their own versions, which add noise or return a fixed image. They hide the real hash, but pages can often tell that the functions were replaced, and the people running one particular extension form a small group.


The Trade-off: Protection You Can See

A page that looks for a defence can usually find it. Randomisation hides the stable value, yet a page that looks for the noise can often spot it. Uniformity hides you only among people with exactly the same setup: Tor Browser users look alike, but one Firefox profile with resistFingerprinting switched on, among the far larger number of default installs, sits in a small group. A blank or placeholder canvas announces itself, and sites that use canvas for real work can break.

What protection buys is a shared label in place of a personal one. A site learns "a user of this browser with protection on" instead of "this exact machine", and with the default settings of a popular browser that label covers a large crowd. Stacking extensions has the opposite effect, because each one adds its own detectable trace. A value that changes every session also looks like a new device to a login system, and some sites answer with the extra checks described in the CAPTCHA trap.


How to Block Canvas Fingerprinting

  • Use a browser with built-in protection and keep its defaults: Brave in every window, Firefox (which varies only the exported file, in every window since version 151), Safari in Private Browsing or, with advanced fingerprinting protection extended, everywhere. Protection built into a browser is shared by all its users, which an extension cannot offer.
  • Change as little as possible. Each hardened preference or extra extension makes your setup rarer.
  • For the strongest separation, use Tor Browser as it ships, since its uniformity depends on you looking like every other Tor Browser user.
  • On Chrome, use at most one reputable canvas extension. Several stacked together are worse than none.
  • When a map, editor or game draws wrongly, turn the protection off for that one site rather than everywhere.
  • Test across sessions: run the scan, restart the browser or open a private window, and run it again. A hash that changes means the browser varies what it hands out, though in Firefox only the exported file changes.

FAQ

Q: What is a canvas fingerprinting test?

A: A page that draws a hidden image the way a tracker would, hashes it and shows you the result. A good one also checks whether the drawing is stable, randomised or blocked. The Canvas Fingerprint card in the browser fingerprint and leak test on packet.guru does this and shows the hash when it is stable.

Q: What is a canvas hash, and why does mine never change?

A: It is a short label computed from the pixels your browser drew. It stays the same because your GPU, driver, fonts and browser version stay the same. It changes after an update to any of them, or when your browser adds per-session noise.

Q: Does incognito mode or a VPN change my canvas fingerprint?

A: A VPN never does, because canvas has nothing to do with your network. It changes only your IP address, which sites judge separately by its IP reputation. Chrome's Incognito mode does not change the canvas either. Firefox private windows and Safari Private Browsing do, because both turn on their fingerprinting protections there by default.

Q: Can third-party scripts use canvas fingerprinting?

A: Yes, and that is the main tracking risk: one vendor's script embedded on many sites computes the same hash everywhere. Firefox blocks known fingerprinting companies as third parties, Brave gives third-party scripts a different seed on each site, and Safari 26 restricts known fingerprinting scripts.

Q: Why does my canvas hash change on every test site in Brave?

A: That is farbling working as designed. Brave seeds its canvas noise per site and per session, so each site sees a different value, and a site sees a new one after you restart the browser.

Q: Does Firefox block canvas fingerprinting?

A: Yes, to a degree that depends on the mode. Every Firefox window blocks known fingerprinting companies, and since version 151 every window varies the exported canvas image from site to site. The pixels a script reads back stay the same, and the stronger pixel noise of private windows and Strict mode does not run alongside the lighter mode yet. The resistFingerprinting preference goes further and hands sites a placeholder image, but it also makes your browser stand out.

Q: Can I block canvas tracking without an extension?

A: Yes. Brave randomises canvas by default, Safari does in Private Browsing, and Tor Browser blocks canvas extraction. Every user of those browsers shares the same built-in protection, so it hides you better than an extension that only a few people run. Firefox is the partial case: it varies only the exported file unless resistFingerprinting is on.

Q: How do I block canvas fingerprinting in Chrome?

A: Chrome cannot do it on its own. A canvas extension can hide the real hash, but sites can often detect the extension. A browser with built-in protection does more and stands out less.


Sources


System Alert

Does your browser draw the same picture for every site?

Run the Privacy & Trust Index check and open the Canvas Fingerprint card to see whether your canvas is stable, randomised or blocked.