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 andersfingerprint()
genannt wird, statt hart-codiert? Getestet habe ich Ihre Geige auf chrome und FF, undhash
ist immer das gleiche auf beiden (was Sinn macht, suchen Sie in Ihren codes, da ich nicht erwartenstrng
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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt eine Bibliothek namens fingerprint.js, das scheint ziemlich gut zu funktionieren.
Habe ich eingebettete dieses Skript auf meiner Website und erhalten Sie Fingerabdrücke hier zu testen. Es funktioniert im Inkognito-Modus auf dem gleichen browser und Chrome bekommt Fingerabdrücke anders als auf anderen Computern.
Werde ich versuchen und die Arbeit an der business-Logik, um zu versuchen und link Fingerabdrücke auf die gleichen Menschen. Offensichtlich ist es schwierig, sich auf eine tote Seite wie die meine, wo Anfragen sind nur wenige, aber Ihren Wert einen Stich.
Könnten Sie versuchen, und verwenden Sie die 32-bit-CRC auf PNG als auf dieser site beschrieben.
atob
nicht unterstützt in IE <= 9.Meine Signatur war FE72FC19 basiert auf dieser Methode.