Toile Empreintes sur Chrome

J'ai fait des expériences avec Canvas Fingerprinting de fournir une autre couche de l'identification de l'utilisateur pour ma base de données... C'est une couche que je connais un hacker expérimenté peut se déplacer depuis l'empreinte digitale est créé à côté client, mais, bon, plus des couches de sécurité le mieux, pas vrai?

Malheureusement, chaque ordinateur Windows 7 je test de l'empreinte digitale sur pour Google Chrome produit de la même empreinte. Par exemple, aller à cette jsfiddle: http://jsfiddle.net/af1pL6fb/5/ Tous les Win7/Chrome machines que j'ai utilisé le résultat dans une table de hachage de 503251348. Si donc beaucoup de différents utilisateurs d'obtenir le même hachage, l'empreinte digitale est inutile.

J'ai essayé de dessiner toutes sortes de petites choses au hasard sur la toile pour obtenir à chaque ordinateur pour produire légèrement différente de résultat - comme c'est la théorie - mais avec tout ce que j'essaie de chaque navigateur google Chrome continue de fournir les mêmes résultats.

Ce que quelqu'un sait pourquoi Chrome est de se comporter comme cela quand même d'autres navigateurs des ordinateurs d'autres sont en me donnant des résultats différents (comme prévu)?

Ou quelqu'un connais quelque chose que je peux inclure dans la toile d'encourager des résultats différents?

OU quelqu'un connais une autre métrique que je peux utiliser pour diferentiate entre les ordinateurs? Par exemple, je suis à la recherche du navigateur.mimeType tableau comme un moyen potentiel d'avoir un semi-indicateur unique pour un navigateur donné.

Voici mon empreinte digitale de la fonction:

function fingerprint() {
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    var txt = 'i9asdm..$#po((^@KbXrww!~cz';
    ctx.textBaseline = "top";
    ctx.font = "16px 'Arial'";
    ctx.textBaseline = "alphabetic";
    ctx.rotate(.05);
    ctx.fillStyle = "#f60";
    ctx.fillRect(125,1,62,20);
    ctx.fillStyle = "#069";
    ctx.fillText(txt, 2, 15);
    ctx.fillStyle = "rgba(102, 200, 0, 0.7)";
    ctx.fillText(txt, 4, 17);
    ctx.shadowBlur=10;
    ctx.shadowColor="blue";
    ctx.fillRect(-20,10,234,5);
    var strng=canvas.toDataURL();

    var hash=0;
    if (strng.length==0) return;
    for (i = 0; i < strng.length; i++) {
        char = strng.charCodeAt(i);
        hash = ((hash<<5)-hash)+char;
        hash = hash & hash;
    }
    return hash;
}
  • Si vous voulez que les empreintes digitales d'être différent, de ne pas txt être différente à chaque fois fingerprint() est appelé, au lieu de codé en dur? J'ai testé votre violon sur chrome et FF, et hash est toujours le même sur les deux (ce qui est logique en regardant vos codes, car je n'en attends pas strng être différent).
  • Non, la façon canvas fingerprinting est censé travail est de vous dessiner exactement la même image pour tous les utilisateurs, mais chaque navigateur/ordinateur dessine l'image d'une manière légèrement différente. Donc, si vous mettez l'image en données, vous obtenez une chaîne de caractères qui est unique par navigateur même si chaque navigateur a dit de dessiner exactement la même chose.
  • C'est bizarre. J'ai eu le même hash d'aller à votre lien. J'ai commencé à jouer avec cette hier et la première chose que je fis, fut de faire fingerprint.js parce que je savais que mes tentatives serait noobish au mieux. Vous pouvez visiter mon site et il va générer un des empreintes différentes pour chaque navigateur sur le même ordinateur. Je ne sais pas pourquoi Chrome serait toujours générer de la même empreinte depuis que Google l'utilise pour nous suivre maintenant.
  • J'ai aussi lu quelque part que vous pouvez utiliser la CRC peu après l'encodage de la toile en BASE64 en utilisant le format PNG au lieu de JPG. Peut-être que c'est pourquoi vous obtenir le même résultat à chaque fois parce que sa l'aide pas cher la compression JPEG.
InformationsquelleAutor rgbflawed | 2014-08-26