Canvas Fingerprinting auf Chrome

Ich habe experimentiert mit Canvas Fingerprinting eine weitere Ebene der Benutzer-Identifikation für meine Datenbank... Es ist eine Ebene, die ich weiß, ein erfahrener hacker umgehen kann, da der Fingerabdruck wird erstellt, client-Seite, aber, hey, die mehr Sicherheit Schichten, desto besser, richtig?

Leider jeder Windows-7-computer, ich Teste den fingerprint-on für Google Chrome, erzeugt den gleichen Fingerabdruck. Zum Beispiel, gehen Sie zu diesem jsfiddle: http://jsfiddle.net/af1pL6fb/5/ Alle Win7/Chrome-Rechner, die ich verwendet habe, das Ergebnis in einem hash 503251348. Wenn so viele unterschiedliche Benutzer erhalten den gleichen hash, der Fingerabdruck nutzlos.

Ich habe versucht zu zeichnen, alle möglichen zufälligen Dinge auf die Leinwand zu bekommen, jeden computer zu produzieren, die ein etwas anderes Ergebnis - so die Theorie - aber mit allem, was ich versuche, jede Chrome-browser hält Sie geben die gleichen Ergebnisse.

Jemand wissen, warum Chrome so verhält, wie dies bei anderen gleichen Browser von anderen Rechnern geben mir unterschiedliche Ergebnisse (wie erwartet)?

Oder wer weiß etwas, ich kann in die Leinwand zu ermutigen, unterschiedliche Ergebnisse?

ODER wer kennt eine andere Metrik, die ich verwenden können, um diferentiate zwischen Computern? Zum Beispiel, ich bin auf der Suche im navigator.mimeType-array als einen möglichen Weg, der mit einem semi-einzigartige Kennzeichen für einen bestimmten browser.

Hier ist mein Fingerabdruck-Funktion:

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;
}
  • Wenn Sie möchten, dass der Fingerabdruck anders zu sein, sollte nicht txt werden jedes mal anders fingerprint() genannt wird, statt hart-codiert? Getestet habe ich Ihre Geige auf chrome und FF, und hash ist immer das gleiche auf beiden (was Sinn macht, suchen Sie in Ihren codes, da ich nicht erwarten strng anders zu sein).
  • Nein, die Art, wie canvas fingerprinting funktionieren soll ist zeichnen Sie das exakte gleiche Bild für alle Benutzer, aber jeder browser/computer zeichnet das Bild in einer etwas anderen Weise. Also, wenn Sie drehen Sie das Bild in den Daten, die Sie am Ende immer eine Zeichenfolge, die einmalig ist pro browser - obwohl jeder browser gesagt wurde, zu zeichnen, die genau die gleiche Sache.
  • Das ist seltsam. Ich habe den gleichen hash zu gehen, um Ihre link. Ich begann Herumspielen mit diesem gestern und das erste, was ich Tat, war fingerprint.js, weil ich wusste, dass meine versuche, wäre noobish am besten. Sie besuchen Sie meine Website und es erzeugt einen unterschiedlichen Fingerabdruck für jeden browser auf dem gleichen computer. Nicht sicher, warum Chrome würde immer den gleichen Fingerabdruck generieren, da Google diese verfolgen uns jetzt.
  • Ich habe auch irgendwo gelesen, dass Sie könnte die CRC-bit nach der Codierung der Leinwand zu BASE64 Verwendung von PNG anstelle von JPG. Vielleicht das ist, warum Sie immer das gleiche Ergebnis jedes mal da sein mit ein paar Billigen JPEG-Komprimierung.
InformationsquelleAutor rgbflawed | 2014-08-26
Schreibe einen Kommentar