My apologies to the Bugzilla team for wasting their time holding my hand on this one. Would have honestly never noticed the little “HTML5” info icon to the left of the URL bar though without their help.
Yeah if it even drew something like “Canvas approval needed to see this image” or just the dang icon in the location bar that would be a start.
I suspect the assumption is that if you are okay digging into
about:config
to turn on the feature, you’re okay with all further interactions veins similarly hidden.
OHHHHHHHHHHHHHHHH
That’s why Champ’d Up doesn’t work properly in Mull Browser! Thanks for this!
How do u do fingerprinting with a canvas
Different graphics stacks (graphics hardware, their drivers (of which there are different ones for all major OSes), the display server (on Linux)) draw things slightly differently. As I remember this especially applies to text rendering using different fonts, but slightly tilted lines, bent lines, and color blending is probably also part of it, and more.
https://en.m.wikipedia.org/wiki/Canvas_fingerprinting
When a user visits a page, the fingerprinting script first draws text with the font and size of its choice and adds background colors (1). Next, the script calls Canvas API’s ToDataURL method to get the canvas pixel data in dataURL format (2), which is basically a Base64 encoded representation of the binary pixel data. Finally, the script takes the hash of the text-encoded pixel data (3), which serves as the fingerprint …
Variations in which the graphics processing unit (GPU), or the graphics driver, is installed may cause the fingerprint variation. The fingerprint can be stored and shared with advertising partners to identify users when they visit affiliated websites. A profile can be created from the user’s browsing activity, allowing advertisers to target advertise to the user’s inferred demographics and preferences.
By January 2022, the concept was extended to fingerprinting performance characteristics of the graphics hardware, called DrawnApart by the researchers.
Hmm seems like their would be ways to mitigate this. Why not just introduce some random human undetectable changes to every pixel ie change breightness color alpha etc by 1 or something so every time u call the ToDataURL it returns different data? Might break some things but since canvases dont seem to be predictable systems anyway whats the harm?
Yes, that is one method to resist canvas fingerprinting, but only resist it. Notice the portion about GPU performance testing, that would work even if the data was fuzzed. The best method seems to be to return fake data that changes frequently, but even that is contested.
Here’s a good document with other methods (but not focusing on just canvas fingerprinting): https://2019.www.torproject.org/projects/torbrowser/design/#fingerprinting-linkability
For what it’s worth, Firefox does protect against canvas fingerprinting by default it seems. I am not exactly sure how, however.
I’ve actually seen that had no idea what it was!
Or email those admins and tell them to fix their website
Surely this is a user experience that could be improved, no? Awesome feature but confusing solution.
The resist fingerprinting mode scrambles canvas read out to prevent sites from using it to create a fingerprint. Because of that, any site that needs to read the canvas back for legitimate purposes will also receive scrambled data. You get more privacy for the minor inconvenience of having to manually allow canvas usage for the sites that actually need it.
Yes I’m aware, but the user interface doesn’t make it easy to understand A) why the canvas looks scrambled, and B) how to permit it on a per-site basis.
The technical implementation is fine, it’s just the user workflow that needs fixed.
And very few sites actually need it.
On librewolf I just get a popup asking to allow canvas
A popup sounds like an annoyance you must deal with on every webpage. Not just the ones that use the canvas for useful things
Canvas is rarely on a web page or at least it rarely affects me
Not really, because doing this will make you more fingerprintable (see my other comment). That’s why the default settings are striking a balance between making all users look similar and not breaking too many things (that would cause users to use user-specific overrides that make them more unique), and why
resistFingerprinting
is inabout:config
rather than a user-facing setting or enabled by default.Or use something like Chameleon and mess with
about:config
which makes every unique fingerprint, different as your data is scrambled. Firefox still haswebRTC
leakage, font fingerprinting, audio fingerprinting… That’s the reason why people use arkenfox’s user.js !
And when you do this, you are now more fingerprintable than you were with
resistFingerprinting
off, as the specific combination of anti-fingerprinting measures and canvas-enablement makes you more unique. Which is why it’s hidden inabout:config
.If you’re fingerprintable and your fingerprint changes every 60 seconds then it doesn’t really matter
You’re still better off hardening these settings
Why would you assume your fingerprint would change every 60 seconds? Are you flipping all the settings every minute or so?
I use the plugin Chameleon to chagney my browser attributes every 60 seconds so my fingerprint changes constantly.
Will I agree and are also a Chameleon user… There are so many attributes that makes you finger printable that I’m slowly thinking to switch to Tor.
In that case remember not to use any plugins, don’t change any of the default settings, and run with a 1080p resolution, never maximize the TOR window either. Since even screen size and resolution is used for your fingerprint.
Yeah, as stated, only for sites you trust.
I was enabling it on at a cycling site that uses HTML5 Canvas to make their charts of how long chain lubricants last zoomable, haha.