TorZillaPrint |
return to TZP index |
[ re-run ]
  loose | ||
prototype lies 1 | ||
known lies | ||
prototype lies code provided by CreepJS 1 |
[ re-run ]
| |
[ i ]range 500-2560
  [css min-device-] screen resolution 1 | |
[matchMedia] screen resolution 2 | |
screen resolution ● | |
available resolution ● | |
outer window ● | |
inner window ● | |
[ i ]
range 500-2560
  [css min-] inner window 1, 3 | |
[matchMedia] inner window 2 | |
viewport 4 | |
[css | matchMedia] display-mode | | |
full screen | |
[ i ]
full-screen-api.enabled
  [api] full screen | |
[ click here ]
[ i ]
DON'T PANIC as you briefly
  [test] full screen 4enter and then exit full screen | |
[ click here ]
[ i ]
will attempt to open a new
  new windowwindow as big as possible and grab the dimensions | |
[android] new window | |
[ i ]
FF83+
  private windowdom.indexedDB.privateBrowsing.enabled | |
[screen] orientation | mozOrientation | angle | |
[css] -moz- | orientation | aspect-ratio | device-aspect-ratio | | | | |
[matchMedia] -moz- | orientation | aspect-ratio | device-aspect-ratio | |
[screen] pixel depth | color depth | |
[css | matchMedia] color | | |
dpi | |
[css min-resolution] dpi | |
[matchMedia max-resolution] dpi | dppx | dpcm | |
zoom % | |
devicePixelRatio | |
[matchMedia -webkit- | -moz-] device-pixel-ratio | | |
--- android --- | |
keyboard height | |
toolbar height | |
code based on work by Arthur Edelstein 1 , kkapsner & CanvasBlocker 2 , Matt Traudt 3 and earthlng 4 |
[ re-run ]
| ||
hash | ||
userAgent | ||
appCodeName | ||
appName | ||
product | ||
appVersion | ||
oscpu | ||
platform | ||
buildID | ||
productSub | ||
vendor | ||
vendorSub | ||
absolute BS detected ▶ | ||
--- other methods --- | ||
iframes 1 | ||
workers | ||
[ click here ] window.open | ||
iframes 1 | ||
[contentWindow] document root | ||
[contentWindow] with URL | ||
[window] document root | ||
[window] with URL | ||
window access | ||
iframe access | ||
nested | ||
workers | ||
web worker | ||
shared worker | ||
service worker | ||
nested worker | ||
worker from blob | ||
iframe code based on work by kkapsner & CreepJS 1 |
These tests, tailored for Firefox , are to show that you cannot hide your browser ,
version or OS . Some OS "guesses" don't have to be "correct"; the measurements provide
the real entropy, such as math hashes, branding dimensions, and pixel values. Each test is independent of the others.
| |
[ re-run ]
| |
[css] branding | |
[css] browser | |
[collation] browser | |
[error messages] browser | |
[resource://] browser | |
[math] browser | |
[PoC]
  [ i ] Firefox 60+ only
  [feature detection] version | |
[chrome://] os | |
[math] os | |
[ i ]Linux, Mac or Windows   [css] os 1if none show = Android if all show = fonts are blocked |
Linux Mac Windows |
[css line-height] os | |
[viewport scrollbar width] os 2, 3 | |
[element scrollbar width] os | |
[widgets] os | |
error messages | |
hash | |
error1 | |
error2 | |
error3 | |
error4 | |
error5 | |
math | |
hash | |
1st edition | |
polyfills: 6th edition | |
widgets | |
hash | |
[ i ]
button, checkbox   variouscolor, combobox datetime-local radio, text |
|
checkbox | |
color | |
combobox | |
datetime-local | |
radio | |
text | |
datetime | |
textarea | |
code based on work by Arthur Edelstein 1 , Dr. Neal Krawetz 2 and earthlng 3 |
[ re-run ]
| |
hash | |
language & locale | |
timezone | |
date/time & format | |
geolocation | |
language & locale | |
languages | language | languages[0] | |
[ i ]
Collator   resolvedOptionsDateTimeFormat DisplayNames ListFormat NumberFormat PluralRules RelativeTimeFormat | |
spare | |
spare | |
timezone | |
timezoneOffset | getTime | Date.parse | |
[PoC]   [timezone offsets] Date.parse | |
[resolvedOptions] timezone | |
spare | |
spare | |
date/time & format | |
date/time | |
toString | |
[long] toLocaleString | |
[long] toLocaleDateString | |
[long] toLocaleTimeString | |
[long] Intl.DateTimeFormat | |
[formatToParts] Intl.DateTimeFormat | |
toGMTString | |
toUTCString | |
toLocaleString | |
[Typed Array] toLocaleString | |
toLocaleDateString | |
Intl.DateTimeFormat | |
[relatedYear | yearName] Intl.DateTimeFormat | |
[dateStyle | timeStyle] Intl.DateTimeFormat | |
toLocaleTimeString | |
toTimeString | |
[resolvedOptions] hourCycle | |
Intl.ListFormat | |
[dayPeriod] Intl.DateTimeFormat | |
[formatRange] Intl.DateTimeFormat | |
Intl.PluralRules | |
Intl.RelativeTimeFormat | |
[formatToParts] Intl.RelativeTimeFormat | |
Intl.NumberFormat | |
[formatToParts] Intl.NumberFormat | |
[BigInt] Intl.NumberFormat | |
[BigInt] toLocaleString | |
[currency] toLocaleString | |
[Intl.DateTimeFormat] calendar | |
[DateTime | RelativeTime] numberingSystem | | |
geolocation | |
[ i ]
geo.enabled   [api | window] geolocation | |
[ i ]
permissions.default.geo   [permission] geolocation | |
[ re-run ]
| |||||||
Element.getClientRects | |||||||
Element.getBoundingClientRect | |||||||
Range.getClientRects | |||||||
Range.getBoundingClientRect | |||||||
click here to view what is being rendered | |||||||
[ *browserleaks* ] | [ *getClientRects* ] | [ Fingerprinting? ] | [ select ] | [ progress bar ] | [ empty button ] | ||
Element.getClientRects
[note: the other three methods have the same hash and values] | |||||||
x | |||||||
y | |||||||
width | |||||||
height | |||||||
top | |||||||
left | |||||||
right | |||||||
bottom | |||||||
Element.getBoundingClientRect | |||||||
x | |||||||
y | |||||||
width | |||||||
height | |||||||
top | |||||||
left | |||||||
right | |||||||
bottom | |||||||
Range.getClientRects | |||||||
x | |||||||
y | |||||||
width | |||||||
height | |||||||
top | |||||||
left | |||||||
right | |||||||
bottom | |||||||
Range.getBoundingClientRect | |||||||
x | |||||||
y | |||||||
width | |||||||
height | |||||||
top | |||||||
left | |||||||
right | |||||||
bottom | |||||||
domrect code based on work by kkapsner & CanvasBlocker |
Additonal canvas tests [iframes, workers, offscreen] can be found at CanvasBlocker | |
[ re-run ]
| |
getContext | |
toDataURL | |
toBlob | |
mozGetAsFile | |
getImageData | |
winding | |
isPointInPath | |
isPointInStroke | |
fillText | |
strokeText | |
canvas code based on work by kkapsner & CanvasBlocker |
[ re-run ]
| |
hash | |
getContext | |
vendor | unmasked | |
renderer | unmasked | |
[webgl] parameters | |
[webgl2] parameters | |
--- render --- | |
readPixels | |
[webgl] image | |
[webgl2] image | |
webgl code based on work by kkapsner & CanvasBlocker |
[ re-run ]
| |
[ i ]dom.webaudio.enabled
  [api] web audio | |
getChannelData 1 | |
copyFromChannel 1 | |
sum 1 | |
------ | |
[ click here ] hash | |
audioContext 2 | |
OscillatorNode 2 | |
OscillatorNode/DynamicsCompressor 2 | |
audioContext 2 | |
OscillatorNode 2 | |
OscillatorNode/DynamicsCompressor 2 | |
audio code based on work by kkapsner & CanvasBlocker 1 and openWPM 2 |
The font enumeration tests are Firefox only and OS
based to get metrics on stable fonts per OS. The font fallback test is a slower method that
may produce different results. Additional font enumeration tests can be found at CreepJS
| |
[ re-run ]
| |
default proportional font | |
default font sizes | |
[ i ]
layout.css.font-loading-api.enabled
  css font loading api | |
[ i ]
browser.display.use_document_fonts
  document fonts | |
fonts 1, 2 | |
[ click here ] font fallback 3 | |
[offset] unicode glyphs 4 | |
[domrect] unicode glyphs 4 | |
[getClientRects] unicode glyphs 4 | |
[textmetrics] unicode glyphs 4 | |
[ i ]
gfx.downloadable_fonts.woff2.enabled
  WOFF2Firefox 68 or lower | |
offset 1 | |
client 2 | |
scroll 2 | |
pixel 2 | |
size 2 | |
perspective 2 | |
transform 2 | |
fonts | [ copy to clipboard ] |
[ copy to clipboard ] | |
textMetrics | |
width | |
actualBoundingBoxAscent | |
actualBoundingBoxDescent | |
actualBoundingBoxLeft | |
actualBoundingBoxRight | |
alphabeticBaseline | |
emHeightAscent | |
emHeightDescent | |
fontBoundingBoxAscent | |
fontBoundingBoxDescent | |
hangingBaseline | |
ideographicBaseline | |
[offset] unicode glyphs | [ copy to clipboard ] |
code based on work by fingerprintjs2 1 , CreepJS 2 , Arthur Edelstein 3 and David Fifield & Serge Egelman 4 |
[ re-run ]
| ||
[-moz-] colors | ||
[system] colors | ||
[CSS4 system] colors | ||
[system] fonts | ||
computed styles 1 | ||
HTMLElement.style 1 | ||
CSSRuleList.style 1 | ||
[ i ]ui.prefersReducedMotion
  [css | matchMedia] prefers-reduced-motion |
| | |
[ i ]ui.systemUsesDarkTheme
  [css | matchMedia] prefers-color-scheme |
| | |
[css | matchMedia] prefers-contrast | | | |
[css | matchMedia] forced-colors | | | |
CSS4 system colors | ||
system fonts | ||
code provided by CreepJS 1 |
test | result |
test | result |
test | result |
[ re-run ]
| ||
[ i ]
mathml.disabled
  mathml | ||
[test example] mathml | ||
[getEntries*] performance.mark | ||
performance.now | ||
[loadEventEnd] performance.timing | ||
PerformanceNavigationTiming | ||
[ i ]
dom.reporting.enabled
  [api] reporting | ||
stack depth | ||
[ i ]
svg.disabled
  svg | ||
[ i ]
javascript.options.wasm
  webassembly | ||
window.content | ||
------ | ||
[ i ]
dom.use_components_shim
  component interfaces | ||
iframe.contentWindow properties 1 | ||
navigator properties | ||
component | ||
navigator | ||
code provided by CreepJS 1 |
section perf | |
tor browser detection points |