Giter Site home page Giter Site logo

imprintjs's Introduction

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

imprintjs's People

Contributors

manueltimita avatar mattbrailsford avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

imprintjs's Issues

Value keeps on changing

Hi, i am using the tests below to identify a browser but value is changing every once a while, even i cant seem to use it properly and i am sure not 1 of these has changed in my pc...

"colorDepth","cpuClass","deviceDpi","platform","installedFonts","processorCores","screenResolution","timezoneOffset","installedLanguages","availableScreenResolution","canvas","doNotTrack","language","pixelRatio","touchSupport","webGl"

imprint.test() never resolves on safari when "localIp" option is included.

Hello, I would like to report an issue with safari browser.
imprint.test() never resolves on safari when "localIp" option is included.

if I remove "localIp" option from tests array, it worked well.

Insted of listening for candidate events,
I've tried inspecting pc.localDescription after a delay.
somehow it worked (succeeded to get an IP),
but I am not sure what's going on with original code.

so I attached my code below, and I hope it helps.
thank you.

var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var re = /c=IN IP4 ([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/;

var localIpTest = new Promise(function(resolve) {
	var pc = new RTCPeerConnection({iceServers:[]});
	var noop = function(){};
	pc.createDataChannel("");
	pc.createOffer(result => pc.setLocalDescription(result, noop, noop), noop);

  setTimeout(() => {
    resolve(re.exec(pc.localDescription.sdp)[1]);
  }, 550);
});

test devices

mobile: webview, in app browser, safari / pc: safari

  • physical device (iphone 6s):
  • virtual device (iphone 6)
  • macbook pro retina 13 (macOS high sierra)

when installedFonts is enabled, same browser gives different identificator.

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

This appeard on windows 10; Chrome version: 79.0.3945.130.
This gave me different identificators when I visited almost clean php website and wordpress website. I've tried some more websites but identificator varied between the two.

TypeError when running in Firefox

Steps to reproduce:

  1. Import JS
  2. Run it with localIp option

Firefox 75 - MBP 15, 2018 - MacOs 10.15.4

TypeError: /([0-9]{1,3}(.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(...) is null imprint.js:594:81
onicecandidate https://cdn.jsdelivr.net/gh/mattbrailsford/imprintjs@master/dist/imprint.js:594
dispatchEvent resource://gre/modules/media/PeerConnection.jsm:818
dispatchEvent resource://gre/modules/media/PeerConnection.jsm:2007
onIceCandidate resource://gre/modules/media/PeerConnection.jsm:2055

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.