Choose: Simple Style

Fingerprinting Feature Detection with Modernizr

║▌║▌│█║▌║│█│█║║║▌│║▌║▌║█║▌█║▌║

/Tracking/Fingerprinting/active/feature_detection/

  • $ fingerprint@info:~ echo $FEATURE-DETECTION
  • Name:

    Feature Detection

    Original feature purpose:

    Feature detection should enable browser compatibility. Feature detection makes it easy for website developers to check if a specific feature is available in the client's browser and allows to react based on the result of the feature check. Feature detection is in most cases an alternative to User Agent Sniffing (derive browser capabilities from User Agent).


    FP-Explanation:

    The availability of Web Standard APIs is implemented differently across all internet browsers and browser versions. Thus, one feature is included in browser X, browser Y needs a plugin, addon or a library for the feature to work correctly and browser Z does not support the feature at all. Given a comprehensive feature test, it is possible to distinguish browser, browser versions, browser settings and active plugins or addons.


    FP-Type:

    active

    FP-Categories:

    js, js-attrib, html5, hardware-dependent, software-dependent, mixed-consistent

    Counter-measures:

    Feature detection as an important tool for web developers will always be possible in certain circumstances, if a specific feature support is evaluated in the browser. Known feature detection tests or frameworks can be blocked, but in general, it will be possible to check if your browser supports a specific feature. Although this could be avoided by disabling JavaScript or block feature tests altogether, but then the browser is like 'WorldWideWeb' (the first web browser), which cannot process or display modern websites and honest websites cannot detect and/or use a feature needed. Extensive feature tests can be limited by a threshold, which defines the number of checks that a website is allowed to perform (during a given time interval). But defining a threshold, whichs blocks Feature Fingerprinting while still allowing feature-rich websites to work properly, can be challenging.

    Version info can also easily be obtained by feature detection based on features that have no setting options and therefore cannot be changed by the end user. This is demonstrated by a PoC (Proof of Concept) to identify Firefox versions 60 to 67 TorZillaPrint (Source code: TorZillaPrint - getVerNo())

    Unwise counter-measures:

    • Deactivating browser standard-features, which are not used by the user
      Problem: The result of the feature fingerprinting distinguishes even more from other clients/browser
      Info: Deactivate only known features which affect privacy


    Publications/References:


  • $ fingerprint@info:~ run feature-detection
  • Demo:

    >> Jump to Feature Detection Demo <<


The table below shows the result of the feature detection made with Modernizr.
A hash is calculated from 298 Modernizr feature support results which serves as a feature fingerprint.
A low-level feature fingerprint is the count of supported features.

Feature Description Modernizr Test Support
Ambient Light Events Modernizr.ambientlight no
Application Cache Modernizr.applicationcache no
HTML5 Audio Element Modernizr.audio no
HTML5 Audio mp3 Modernizr.audio.mp3 no
HTML5 Audio m4a Modernizr.audio.m4a no
HTML5 Audio ogg Modernizr.audio.ogg no
HTML5 Audio wav Modernizr.audio.wav no
Battery API Modernizr.batteryapi no
Blob constructor Modernizr.blobconstructor no
Canvas Modernizr.canvas no
Canvas text Modernizr.canvastext no
Content Editable Modernizr.contenteditable no
Context menus Modernizr.contextmenu no
Cookies Modernizr.cookies no
Cross-Origin Resource Sharing Modernizr.cors no
Web Cryptography Modernizr.crypto no
Custom Elements API Modernizr.customelements no
Custom protocol handler Modernizr.customprotocolhandler no
CustomEvent Modernizr.customevent no
Dart Modernizr.dart no
DataView Modernizr.dataview no
Emoji Modernizr.emoji no
Event Listener Modernizr.eventlistener no
EXIF Orientation Modernizr.exiforientation no
Flash Modernizr.flash no
Force Touch Events Modernizr.forcetouch no
Fullscreen API Modernizr.fullscreen no
GamePad API Modernizr.gamepads no
Geolocation API Modernizr.geolocation no
Hashchange event Modernizr.hashchange no
Hidden Scrollbar Modernizr.hiddenscroll no
History API Modernizr.history no
HTML Imports Modernizr.htmlimports no
IE8 compat mode Modernizr.ie8compat no
IndexedDB Modernizr.indexeddb no
IndexedDB deletedatabase Modernizr.indexeddb.deletedatabase no
IndexedDB Blob Modernizr.indexeddbblob no
Input attributes Modernizr.input no
Form input types Modernizr.inputtypes no
input[search] search event Modernizr.inputtypes.search
Form input Telephone Modernizr.inputtypes.tel no
Form input URL Modernizr.inputtypes.url no
Form input E-Mail Modernizr.inputtypes.email no
Form input Date and Time Modernizr.inputtypes.datetime no
Form input Date Modernizr.inputtypes.date no
Form input Month Modernizr.inputtypes.month no
Form input Week Modernizr.inputtypes.week no
Form input Time Modernizr.inputtypes.time no
Form input Local Date and Time Modernizr['inputtypes']['datetime-local'] no
Form input Number Modernizr.inputtypes.number no
Form input Range Modernizr.inputtypes.range no
Form input Color Modernizr.inputtypes.color no
Internationalization API Modernizr.intl no
JSON Modernizr.json no
Font Ligatures Modernizr.ligatures no
Reverse Ordered Lists Modernizr.olreversed no
MathML Modernizr.mathml no
Message Channel Modernizr.messagechannel no
Notification Modernizr.notification no
Page Visibility API Modernizr.pagevisibility no
Navigation Timing API Modernizr.performance no
DOM Pointer Events API Modernizr.pointerevents no
Pointer Lock API Modernizr.pointerlock no
postMessage Modernizr.postmessage no
Proximity API Modernizr.proximity no
QuerySelector Modernizr.queryselector no
Quota Storage Management API Modernizr.quotamanagement no
requestAnimationFrame Modernizr.requestanimationframe no
ServiceWorker API Modernizr.serviceworker no
SVG Modernizr.svg no
Template strings Modernizr.templatestrings no
Touch Events Modernizr.touchevents no
Typed arrays Modernizr.typedarrays no
Unicode Range Modernizr.unicoderange no
Unicode characters Modernizr.unicode no
IE User Data API Modernizr.userdata no
Vibration API Modernizr.vibrate no
HTML5 Video Modernizr.video no
VML Modernizr.vml no
Web Intents Modernizr.webintents no
Web Animation API Modernizr.webanimations no
WebGL Modernizr.webgl no
WebSockets Support Modernizr.websockets no
XDomainRequest Modernizr.xdomainrequest no
a[download] Attribute Modernizr.adownload no
Audio Loop Attribute Modernizr.audioloop no
Audio Preload Modernizr.audiopreload no
Web Audio API Modernizr.webaudio no
Low Battery Level Modernizr.lowbattery no
canvas blending support Modernizr.canvasblending no
canvas.toDataURL type jpeg support Modernizr.todataurljpeg no
canvas.toDataURL type png support Modernizr.todataurlpng no
canvas.toDataURL type webp support Modernizr.todataurlwebp no
canvas winding support Modernizr.canvaswinding no
getRandomValues Modernizr.getrandomvalues no
cssall Modernizr.cssall no
CSS Animations Modernizr.cssanimations no
Appearance Modernizr.appearance no
Backdrop Filter Modernizr.backdropfilter no
CSS Background Blend Mode Modernizr.backgroundblendmode no
CSS Background Clip Text Modernizr.backgroundcliptext no
Background Position Shorthand Modernizr.bgpositionshorthand no
Background Position XY Modernizr.bgpositionxy no
Background Repeat Space Modernizr.bgrepeatspace no
Background Repeat Round Modernizr.bgrepeatround no
Background Size Modernizr.backgroundsize no
Background Size Cover Modernizr.bgsizecover no
Border Image Modernizr.borderimage no
Border Radius Modernizr.borderradius no
Box Shadow Modernizr.boxshadow no
Box Sizing Modernizr.boxsizing no
CSS Calc Modernizr.csscalc no
CSS :checked pseudo-selector Modernizr.checked no
CSS Font ch Units Modernizr.csschunit no
CSS Columns Modernizr.csscolumns no
CSS Grid (old) Modernizr.cssgridlegacy no
CSS Grid (new) Modernizr.cssgrid no
CSS Cubic Bezier Range Modernizr.cubicbezierrange no
CSS Display run-in Modernizr.displayrunin no
CSS Display table Modernizr.displaytable no
CSS text-overflow ellipsis Modernizr.ellipsis no
CSS.escape() Modernizr.cssescape no
CSS Font ex Units Modernizr.cssexunit no
CSS Filters Modernizr.cssfilters no
Flexbox Modernizr.flexbox no
Flexbox (legacy) Modernizr.flexboxlegacy no
Flexbox (tweener) Modernizr.flexboxtweener no
Flex Line Wrapping Modernizr.flexwrap no
CSS :focus-within pseudo-selector Modernizr.focuswithin no
@font-face Modernizr.fontface no
CSS Generated Content Modernizr.generatedcontent no
CSS Gradients Modernizr.cssgradients no
CSS Hairline Modernizr.hairline no
CSS HSLA Colors Modernizr.hsla no
CSS Hyphens Modernizr.csshyphens no
CSS Soft Hyphens Modernizr.softhyphens no
CSS Soft Hyphens Find Modernizr.softhyphensfind no
CSS :invalid pseudo-class Modernizr.cssinvalid no
CSS :last-child pseudo-selector Modernizr.lastchild no
CSS Mask Modernizr.cssmask no
CSS Media Queries Modernizr.mediaqueries no
CSS Multiple Backgrounds Modernizr.multiplebgs no
CSS :nth-child pseudo-selector Modernizr.nthchild no
CSS Object Fit Modernizr.objectfit no
CSS Opacity Modernizr.opacity no
CSS Overflow Scrolling Modernizr.overflowscrolling no
CSS Pointer Events Modernizr.csspointerevents no
CSS position: sticky Modernizr.csspositionsticky no
CSS Generated Content Animations Modernizr.csspseudoanimations no
CSS Generated Content Transitions Modernizr.csspseudotransitions no
CSS Reflections Modernizr.cssreflections no
CSS Regions Modernizr.regions no
CSS Font rem Units Modernizr.cssremunit no
CSS UI Resize Modernizr.cssresize no
CSS rgba Modernizr.rgba no
CSS Stylable Scrollbars Modernizr.cssscrollbar no
Scroll Snap Points Modernizr.scrollsnappoints no
CSS Shapes Modernizr.shapes no
CSS general sibling selector Modernizr.siblinggeneral no
CSS Subpixel Fonts Modernizr.subpixelfont no
CSS Supports Modernizr.supports no
CSS :target pseudo-class Modernizr.target no
CSS text-align-last Modernizr.textalignlast no
CSS textshadow Modernizr.textshadow no
CSS Transforms Modernizr.csstransforms no
CSS Transforms 3D Modernizr.csstransforms3d no
CSS Transforms Level 2 Modernizr.csstransformslevel2 no
CSS Transform Style preserve-3d Modernizr.preserve3d no
CSS Transitions Modernizr.csstransitions no
CSS user-select Modernizr.userselect no
CSS :valid pseudo-class Modernizr.cssvalid no
Variable Open Type Fonts Modernizr.variablefonts no
CSS vh unit Modernizr.cssvhunit no
CSS vmax unit Modernizr.cssvmaxunit no
CSS vmin unit Modernizr.cssvminunit no
CSS vw unit Modernizr.cssvwunit no
will-change Modernizr.willchange no
CSS wrap-flow Modernizr.wrapflow no
classList Modernizr.classlist no
createElement with Attributes Modernizr.createelementattrs no
dataset API Modernizr.dataset no
Document Fragment Modernizr.documentfragment no
[hidden] Attribute Modernizr.hidden no
microdata Modernizr.microdata no
DOM4 MutationObserver Modernizr.mutationobserver no
Passive event listeners Modernizr.passiveeventlisteners no
bdi Element Modernizr.bdi no
datalist Element Modernizr.datalistelem no
details Element Modernizr.details no
output Element Modernizr.outputelem no
picture Element Modernizr.picture no
progress bar Element Modernizr.progressbar no
progress meter Element Modernizr.meter no
ruby, rp, rt Elements Modernizr.ruby no
Template Tag Modernizr.template no
time Element Modernizr.time no
Track element Modernizr.texttrackapi no
Timed Text Track Modernizr.track no
Unknown Elements Modernizr.unknownelements no
ES5 Array Modernizr.es5array no
ES5 Date Modernizr.es5date no
ES5 Function Modernizr.es5function no
ES5 Object Modernizr.es5object no
ES5 Modernizr.es5 no
ES5 Strict Mode Modernizr.strictmode no
ES5 String Modernizr.es5string no
ES5 Syntax Modernizr.es5syntax no
ES5 Immutable Undefined Modernizr.es5undefined no
ES6 Array Modernizr.es6array no
ES6 Arrow Functions Modernizr.arrow no
ES6 Collections Modernizr.es6collections no
ES5 String.prototype.contains Modernizr.contains no
ES6 Generators Modernizr.generators no
ES6 Math Modernizr.es6math no
ES6 Number Modernizr.es6number no
ES6 Object Modernizr.es6object no
ES6 Promises Modernizr.promises no
ES6 String Modernizr.es6string no
Motion Events Modernizr.devicemotion no
Orientation Events Modernizr.deviceorientation no
onInput Event Modernizr.oninput no
File API Modernizr.filereader no
Filesystem API Modernizr.filesystem no
input[capture] Attribute Modernizr.capture no
input[file] Attribute Modernizr.fileinput no
input[directory] Attribute Modernizr.fileinputdirectory no
input[form] Attribute Modernizr.formattribute no
input[type="number"] Localization Modernizr.localizednumber no
placeholder attribute Modernizr.placeholder no
form#requestAutocomplete() Modernizr.requestautocomplete no
Form Validation Modernizr.formvalidation no
iframe[sandbox] Attribute Modernizr.sandbox no
iframe[seamless] Attribute Modernizr.seamless no
iframe[srcdoc] Attribute Modernizr.srcdoc no
Animated PNG Modernizr.apng no
Image crossOrigin Modernizr.imgcrossorigin no
JPEG 2000 Modernizr.jpeg2000 no
JPEG XR (extended range) Modernizr.jpegxr no
sizes attribute Modernizr.sizes no
srcset attribute Modernizr.srcset no
Webp Alpha Modernizr.webpalpha no
Webp Animation Modernizr.webpanimation no
Webp Lossless Modernizr.webplossless no
Webp Modernizr.webp no
input formaction Modernizr.inputformaction no
input formenctype Modernizr.inputformenctype no
input formmethod Modernizr.inputformmethod no
input formtarget Modernizr.inputformtarget no
Hover Media Query Modernizr.hovermq no
Pointer Media Query Modernizr.pointermq no
Beacon API Modernizr.beacon no
Low Bandwidth Connection Modernizr.lowbandwidth no
Server Sent Events Modernizr.eventsource no
Fetch API Modernizr.fetch no
XHR responseType='arraybuffer' Modernizr.xhrresponsetypearraybuffer no
XHR responseType='blob' Modernizr.xhrresponsetypeblob no
XHR responseType='document' Modernizr.xhrresponsetypedocument no
XHR responseType='json' Modernizr.xhrresponsetypejson no
XHR responseType='text' Modernizr.xhrresponsetypetext no
XHR responseType Modernizr.xhrresponsetype no
XML HTTP Request Level 2 XHR2 Modernizr.xhr2 no
script[async] Modernizr.scriptasync no
script[defer] Modernizr.scriptdefer no
Speech Recognition API Modernizr.speechrecognition no
Speech Synthesis API Modernizr.speechsynthesis no
Local Storage Modernizr.localstorage no
Session Storage Modernizr.sessionstorage no
Web SQL Database Modernizr.websqldatabase no
style[scoped] Modernizr.stylescoped no
SVG as an <img> tag source Modernizr.svgasimg no
SVG clip paths Modernizr.svgclippaths no
SVG filters Modernizr.svgfilters no
SVG foreignObject Modernizr.svgforeignobject no
Inline SVG Modernizr.inlinesvg no
SVG SMIL animation Modernizr.smil no
textarea maxlength Modernizr.textareamaxlength no
Blob URLs Modernizr.bloburls no
Data URI Modernizr.datauri no
Data URI over 32kb Modernizr.datauri.over32kb no
URL parser Modernizr.urlparser no
URLSearchParams API Modernizr.urlsearchparams no
Video Autoplay Modernizr.videoautoplay no
Video crossOrigin Modernizr.videocrossorigin no
Video Loop Attribute Modernizr.videoloop no
Video Preload Attribute Modernizr.videopreload no
WebGL Extensions Modernizr.webglextensions no
RTC Data Channel Modernizr.datachannel no
getUserMedia Modernizr.getusermedia no
RTC Peer Connection Modernizr.peerconnection no
Binary WebSockets Modernizr.websocketsbinary no
Base 64 encoding/decoding Modernizr.atobbtoa no
Framed window Modernizr.framed no
matchMedia Modernizr.matchmedia no
Workers from Blob URIs Modernizr.blobworkers no
Workers from Data URIs Modernizr.dataworkers no
Shared Workers Modernizr.sharedworkers no
Transferables Objects Modernizr.transferables no
Web Workers Modernizr.webworkers no