Skip to content

Javascript library for browser fingerprinting

License

Notifications You must be signed in to change notification settings

BitPerformance/imprintjs

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ImprintJS Logo

A javascript library for browser fingerprinting.

Demo

Installation

Simply include imprint.min.js in your HTML page. It has no other dependencies.

<script type="text/javascript" src="imprint.min.js"></script>

Usage

To create a fingerprint, instantiate a new instance of the ImprintJs class and call getFingerprint passing in a list of tests you wish to run. The getFingerprint method returns a javascript Promise which once all tests have run, returns the generated fingerprint.

<script type="text/javascript">
    
    var browserTests = [
        "audio",
        "availableScreenResolution",
        "canvas",
        "colorDepth",
        "cookies",
        "cpuClass",
        "deviceDpi",
        "doNotTrack",
        "indexedDb",
        "installedFonts",
        "language",
        "localIp",
        "localStorage",
        "pixelRatio",
        "platform",
        "plugins",
        "processorCores",
        "screenResolution",
        "sessionStorage",
        "timezoneOffset",
        "touchSupport",
        "userAgent",
        "webGl"
    ];

    imprint.test(browserTests).then(function(result){
      console.log(result);
    });

</script>

Supported Tests

Out of the box, ImprintJS comes with the following tests

  • audio
  • availableScreenResolution
  • canvas
  • colorDepth
  • cookies
  • cpuClass
  • deviceDpi
  • doNotTrack
  • indexedDb
  • installedFonts
  • installedLanguages [experimental, inconsistent results]
  • language
  • localIp
  • localStorage
  • mediaDevices [experimental, inconsistent results]
  • pixelRatio
  • platform
  • plugins
  • processorCores
  • publicIp [external request]
  • screenResolution
  • sessionStorage
  • timezoneOffset
  • touchSupport
  • userAgent
  • webGl

Custom Tests

If you'd like to add your own custom test, you can register a new test like so

imprint.registerTest("testAlias", function(){
	return new Promise(function(resolve) {
	    var value = ""; // Some code to perform a test
		return resolve(value);
	});
});

All tests must have an alias, and a factory method that creates a javascript Promise that performs the actual test. We use promises to allow for async tests. On completion, the promise should always resolve. If a value cannot be determined, simply resolve with an empty string.

Known issues

  • Some versions of Firefox for Android report inccorrect screen.height / screen.width values as they subtract the browser chrome when they shouldnt do resulting in inconsistant screenResolution test values. No current workaround. Issue 1120452
  • Firefox for Android reports a color depth of 24 instead of 32 as they percieve the last 8 bits as being alpha and so shouldn't be concidered as part of the color depth. As a workaround, we treat all 32 bit colorDepths as 24 bit. Issue 424386

Acknowledgement

ImprintJS is based heavily on code from a number of libraries, namely

ImprintJS logo modified from fingerprint icon by Lloyd Humphreys from the Noun Project

About

Javascript library for browser fingerprinting

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 94.4%
  • HTML 5.6%