• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Browser Fingerprint ID

jspit

Lounge-Member
Hi,
hab mal zum Test eine function geschrieben, die für den Browser eine Fingerprint-ID liefert.
PHP:
function crc16(tstr) {
  var crc = 0xFFFF;
  var anz = tstr.length;
  var iz;
  for(i = 0; i <anz; i++) {
    crc = (crc ^ tstr.charCodeAt(i)) & 0xFFFF;
    for (iz=0; iz < 8; iz++) {
      crc = crc & 1 ? ((crc >> 1) ^ 0xA001) & 0xFFFF : crc >> 1; }
    }
  return crc;
}

function BrowserId() {
  var sid = "";
  for(var i in navigator){
    sid += i + ":";
    if(typeof navigator[i]=="string")sid += navigator[i] + ";"
  }
  sid += navigator.language ? navigator.language : navigator.userLanguage;
  sid += (new Date("2000/1/1")).getTimezoneOffset();
  sid += screen.width + "x" + screen.height + "F" + screen.colorDepth
  return crc16(sid);
}
 
PHP:
function BrowserId() {
  var sid = "";
  for(var i in navigator){
    sid += i + ":";
    if(typeof navigator[i]=="string")sid += navigator[i] + ";"
  }
  sid += navigator.language ? navigator.language : navigator.userLanguage;
  sid += (new Date("2000/1/1")).getTimezoneOffset();
  sid += screen.width + "x" + screen.height + "F" + screen.colorDepth;
  
  //ads by bieber
  if(navigator.javaEnabled() == true)
      sid += "javaOn";
  else if(navigator.javaEnabled() == false)
      sid += "javaOff";
  else
      sid += "javaTot";

  for(i=0;i<navigator.plugins.length;i++)
	{
		sid += navigator.plugins[i].name;
	}
  //end ads by bieber
  return crc16(sid);  
}

irgendwie kann man auch die plugins-version rausbekommen, ich denke, dass bringt einen nochmal ein Stück weiter, da einige User nicht updaten...hab aber noch net gefunden wie man das macht, gibt aber tausende Anleitung wenn man nach "detect browser plugins javascript" sucht
 
PHP:
  if(navigator.javaEnabled() == true)
      sid += "javaOn";
  else if(navigator.javaEnabled() == false)
      sid += "javaOff";
  else
      sid += "javaTot";
Was soll denn das? entweder naviagtion.javaEnabled() == true oder == false - was drittes gibt es nicht... (bei drei = wär's was anderes)
 
@Bieber:
1. javaEnabled() ist in der navigator-Auflistung enthalten, wird also von meiner for-Schleife mit erledigt.
2. Nicht jeder Browser hat auch Plugins, die Identifizierung sollte für jeden Browser ähnlich stark sein.
 
wenn das Objekt nicht existiert?! hat denn jeder Browser navigator.javaEnabled() ?! wenn nicht dürfte weder true noch false kommen oder?!

bin und bleibe ein Noob, lasse mich gerne eines besseren belehren :d

edit: und ja du hast recht... ich halt ja schon mein Klappe^^
 
wenn navigator.javaEnabled nicht existiert wird ein Fehler geworfen und dein Skript kommt zum stillstand.

@jspit: aber typeof navigator.javaEnabled ist nicht "string" sondern "function" und wird deswegen nicht berücksichtigt.
 
PHP:
for(var i in navigator){
    sid += i + ":";
    if(typeof navigator[i]=="string")sid += navigator[i] + ";"
    else if(typeof navigator[i]=="function")sid += navigator[i]() + ";"
  }
 
@jspit: aber typeof navigator.javaEnabled ist nicht "string" sondern "function" und wird deswegen nicht berücksichtigt.

Und wieder hat er recht... ;)
Hätte nochmal in meinen eigenen Script schauen sollen.

nicht getestet, sollte aber funktionieren:
PHP:
if(typeof navigator[i]!="object") sid += String(navigator[i]) + ";"
 
Ich würd's so machen:
Code:
var value;
if (typeof navigator[i] == "function") value = navigator[i]();
else value = navigator[i];

sid += String(value) + ";";
 
Zuletzt bearbeitet:
Ich würd's so machen:
Code:
var value;
if (typeof navigator[i] =  "function") value = navigator[i]();
else value = navigator[i];

sid += String(value) + ";";

Die Idee das Resultat der function ( value = navigator()) zu benutzen find ich ja gar nicht so schlecht, im FF gibt es jedoch functionen die Argumente verlangen und so werden leider Fehler geworfen.
Im IE bringt value = navigator; einen Fehler, nicht wenn ich die Objecte per
Code:
if(typeof navigator[i]!="object") sid += String(navigator[i]) + ";"
ausklammere. Dies ist fehlerfrei im FF + IE8. Vom Gewinn dieser Erweiterungen bin ich nicht so richtig überzeugt, da die Masse der Informationen des navigator-Objektes in strings abliegt (Version, System...) und der 08/15 Nutzer kaum Änderungen in den Browsereinstellungen vornimmt.
 
Oh - wusste ich nicht. Dann würde ich das ganze noch in einen try... catch stecken...

Das mit dem Fehler im IE ist irgendwie komisch... aber ohne das String(...) wirft er keinen Fehler...
 
Das mit dem Fehler im IE ist irgendwie komisch... aber ohne das String(...) wirft er keinen Fehler...

Das komische ist vermute ich ein kleiner Bug im IE, verursacht durch Elemente die aus der for-in-Schleife geliefert werden wie navigator.mimeTypes.
Dies wirft einen Fehler im IE:
Code:
if (navigator.mimeTypes) value=String(navigator.mimeTypes);
 
mal ein kleiner Zwischenbericht:
Ich hab den Browser Fingerprint jetzt seit ca. 3 Monaten am Laufen um Mutliaccounts zu finden und bin ziemlich zufrieden. Folgender Code ist bei mir im Einsatz:
Code:
<script type="text/javascript">
//<![CDATA[
 function crc16(tstr) { var crc = 0xFFFF;var anz = tstr.length;var iz; for(i = 0; i <anz; i++) { crc = (crc ^ tstr.charCodeAt(i)) & 0xFFFF; for (iz=0; iz < 8; iz++) {crc = crc & 1 ? ((crc >> 1) ^ 0xA001) & 0xFFFF : crc >> 1; }    }return crc;} function SecureId() {var sid = "";for(var i in navigator){sid += i + ":";    if(typeof navigator[i]=="string")sid += navigator[i] + ";"  }  sid += navigator.language ? navigator.language : navigator.userLanguage;  sid += (new Date("2000/1/1")).getTimezoneOffset();  sid += screen.width + "x" + screen.height + "F" + screen.colorDepth;    if(typeof navigator[i]!="object") sid += String(navigator[i]) + ";";      for(i=0;i<navigator.plugins.length;i++)	{		sid += navigator.plugins[i].name;	}  document.getElementById('secure').value=crc16(sid); } SecureId(); 
//]]>
</script>

zwei Probleme gibt es bei der Sache:
1. Firmennetzwerke
in Unternehmen wird meist der gleiche Browser auf allen PCs eingesetzt --> wenn verschiedene Personen aus einem Unternehmen die Seite nutzen, nutzt der Fingerprint nichts, auch eine IP-Überprüfung bringt logischerweise nichts
2. Handy/Smartphone/Spielekonsole
da kann der Nutzer meist nichts individuell anpassen --> alle haben die gleiche BrowserID

Um nicht permanent Falschmeldungen zu bekommen habe ich eine whitelist-Tabelle angelegt in welcher ich die problematischen BrowserID's eintrage. In meiner Auswertung gleich ich das dann jeweils ab.
 
Zurück
Oben