Wie identifiziere ich Computer, die meine Website besuchen, eindeutig?


184

Ich muss einen Weg finden, um jeden Computer, der die von mir erstellte Website besucht, eindeutig zu identifizieren. Hat jemand einen Rat, wie man das erreicht?

Da ich möchte, dass die Lösung auf allen Computern und in allen Browsern funktioniert (im Rahmen des Zumutbaren), versuche ich, eine Lösung mit Javascript zu erstellen.

Ich schätze die Hilfe. Vielen Dank.

BEARBEITEN:

Cookies reichen nicht aus.

Ich brauche die Fähigkeit, im Grunde eine Anleitung zu erstellen, die für einen Computer einzigartig und wiederholbar ist, vorausgesetzt, es wurden keine Hardwareänderungen am Computer vorgenommen. Anweisungen, an die ich denke, sind das Abrufen des MAC der Netzwerkkarte und anderer Informationen dieser Art, die den Computer identifizieren, der die Website besucht.


4
Sie können den Mac ihrer Netzwerkkarte nicht erhalten - IP enthält diese Informationen nicht. Das Beste, was Sie erhalten können, ist die IP-Adresse ihres ISP-Gateways. Für einige ISPs kann dies für alle Benutzer in einer bestimmten Stadt gleich sein.
Martin Beckett

1
Die Tatsache, dass Sie nicht möchten, dass der Benutzer es fälschen kann. Die Antwort ist natürlich, dass dies nicht möglich ist, ohne dass eine privilegierte Komponente von Ihnen auf dem Computer des Benutzers installiert ist.
AnthonyWJones

MAC-Adressen sind trivial leicht zu fälschen. Meine miese kleine drahtlose Verbindung wird über Ihren MAC geleitet, ersetzt ihre eigene oder verwendet die von Ihnen angegebene.
Kent Brewster

Dies kann nicht getan werden - Cookies sind die beste
Wahl

Bitte lesen Sie meine Antwort auf dieser Seite. Ich habe eine sehr gute Idee für dieses Problem :)
Mahdi Jazini

Antworten:


58

Diese Personen haben eine Fingerabdruckmethode entwickelt, um einen Benutzer mit einem hohen Maß an Genauigkeit zu erkennen:

https://panopticlick.eff.org/static/browser-uniqueness.pdf

Wir untersuchen anhand der Versions- und Konfigurationsinformationen, die sie auf Anfrage an Websites übertragen,, inwieweit moderne Webbrowser einem „Gerätefingerabdruck“ ausgesetzt sind. Wir haben einen möglichen Fingerabdruckalgorithmus implementiert und diese Fingerabdrücke von einer großen Auswahl von Browsern gesammelt, die unsere Testseite panopticlick.eff.org besucht haben. Wir stellen fest, dass die Verteilung unseres Fingerabdrucks mindestens 18,1 Bit Entropie enthält. Wenn wir also zufällig einen Browser auswählen, erwarten wir bestenfalls, dass nur einer von 286.777 anderen Browsern seinen Fingerabdruck teilt. Bei Browsern, die Flash oder Java unterstützen, ist die Situation schlimmer: Der durchschnittliche Browser enthält mindestens 18,8 Bit identifizierende Informationen. 94,2% der Browser mit Flash oder Java waren in unserem Beispiel einzigartig.

Durch die Beobachtung wiederkehrender Besucher schätzen wir, wie schnell sich die Fingerabdrücke des Browsers im Laufe der Zeit ändern können. In unserer Stichprobe änderten sich die Fingerabdrücke recht schnell, aber selbst eine einfache Heuristik konnte normalerweise erraten, wann ein Fingerabdruck eine „aktualisierte“ Version des Fingerabdrucks eines zuvor beobachteten Browsers war. 99,1% der Vermutungen waren korrekt und eine falsch positive Rate von nur 0,86% .

Wir diskutieren, welche Fingerabdrücke von Browser-Datenschutzbedrohungen in der Praxis auftreten und welche Gegenmaßnahmen angemessen sein können, um dies zu verhindern. Es gibt einen Kompromiss zwischen dem Schutz vor Fingerabdruck und bestimmten Arten der Debugbarkeit, der in aktuellen Browsern stark gegen die Privatsphäre gewichtet wird. Paradoxerweise können sich Anti-Fingerprinting-Datenschutztechnologien selbst zunichte machen, wenn sie nicht von einer ausreichenden Anzahl von Personen verwendet werden. Wir zeigen, dass einige Datenschutzmaßnahmen derzeit diesem Paradoxon zum Opfer fallen, andere jedoch nicht ...


14
Ich bin Entwickler und bin hierher gekommen, um nach einer schnellen Lösung oder einem kleinen Codefragment zu suchen. Dieses Dokument zeigt nicht, wie es implementiert wird. Ich möchte wissen, wie ich dies implementiere, damit ich eindeutige Benutzer für meine Site verfolgen kann.
Oliver

9
@Oliver Du bist richtig. Dies gibt Ihnen keine Antwort auf einem Teller. Es erfordert weiteres Lesen, Verständnis aller damit verbundenen Probleme und warum ein einfaches Code-Snippet wahrscheinlich nie vollständig funktioniert. Ein unternehmungslustiger Entwickler könnte eine Bibliothek schreiben, die die ganze harte Arbeit erledigt, und es Menschen ermöglichen, nach einer "schnellen Lösung" zu suchen, um in Zukunft davon zu profitieren.
Jonathan

2
Die Antwort ist auch nur Link. Eine Zusammenfassung der im PDF beschriebenen Techniken ist wünschenswert, falls das PDF nicht mehr verfügbar ist.
Damian Yerrick

2
Siehe meine Antwort hier für ein Open-Source-Paket und eine einfache Möglichkeit, Fingerabdrücke zu implementieren stackoverflow.com/a/47536192/3650835
KayakinKoder

Also mache ich besser einen belastbaren "Keks" mit einer zufälligen großen Zahl: D
Luis Mauricio

49

Einführung

Ich weiß nicht, ob es eine Möglichkeit gibt oder jemals geben wird, Maschinen allein mit einem Browser eindeutig zu identifizieren. Die Hauptgründe sind:

  • Sie müssen Daten auf dem Computer des Benutzers speichern. Diese Daten können vom Benutzer jederzeit gelöscht werden. Wenn Sie nicht die Möglichkeit haben, diese Daten neu zu erstellen, die für jede Maschine eindeutig sind, stecken Sie fest.
  • Validierung. Sie müssen sich vor Spoofing, Sitzungsentführung usw. schützen.

Selbst wenn es Möglichkeiten gibt, einen Computer ohne Verwendung von Cookies zu verfolgen, gibt es immer eine Möglichkeit, ihn zu umgehen, und Software, die dies automatisch tut. Wenn Sie wirklich etwas auf der Basis eines Computers verfolgen müssen, müssen Sie eine native Anwendung schreiben (Apple Store / Android Store / Windows-Programm / usw.).

Ich kann Ihnen möglicherweise keine Antwort auf die von Ihnen gestellte Frage geben, aber ich kann Ihnen zeigen, wie Sie die Sitzungsverfolgung implementieren. Mit der Sitzungsverfolgung versuchen Sie, die Browsersitzung zu verfolgen, anstatt dass der Computer Ihre Site besucht. Wenn Sie die Sitzung verfolgen, sieht Ihr Datenbankschema folgendermaßen aus:

sesssion:
  sessionID: string
  // Global session data goes here

  computers: [{
     BrowserID: string
     ComputerID: string
     FingerprintID: string
     userID: string
     authToken: string
     ipAddresses: ["203.525....", "203.525...", ...]
     // Computer session data goes here
  }, ...]

Vorteile des sitzungsbasierten Trackings:

  1. Für angemeldete Benutzer sind , können Sie immer die gleiche Session - ID von den Benutzern erzeugen username/ password/ email.
  2. Sie können weiterhin Gastbenutzer mit verfolgen sessionID.
  3. Selbst wenn mehrere Personen denselben Computer verwenden (z. B. Cybercafe), können Sie sie separat verfolgen, wenn sie sich anmelden.

Nachteile des sitzungsbasierten Trackings:

  1. Sitzungen sind browserbasiert und nicht computerbasiert. Wenn ein Benutzer zwei verschiedene Browser verwendet, führt dies zu zwei verschiedenen Sitzungen. Wenn dies ein Problem ist, können Sie hier aufhören zu lesen.
  2. Sitzungen laufen ab, wenn der Benutzer nicht angemeldet ist. Wenn ein Benutzer nicht angemeldet ist, verwendet er eine Gastsitzung, die ungültig wird, wenn der Benutzer Cookies und den Browser-Cache löscht.

Implementierung

Es gibt viele Möglichkeiten, dies umzusetzen. Ich glaube nicht, dass ich sie alle abdecken kann. Ich werde nur meinen Favoriten auflisten, was dies zu einer meinungsbildenden Antwort machen würde . Denken Sie daran.

Grundlagen

Ich werde die Sitzung verfolgen, indem ich einen so genannten Forever-Cookie verwende. Dies sind Daten, die sich automatisch neu erstellen, selbst wenn der Benutzer seine Cookies löscht oder seinen Browser aktualisiert. Es wird jedoch nicht überleben, wenn der Benutzer sowohl seine Cookies als auch seinen Browser-Cache löscht.

Um dies zu implementieren, verwende ich den Browser-Caching-Mechanismus ( RFC ), die WebStorage-API ( MDN ) und Browser-Cookies ( RFC , Google Analytics ).

Legal

Um Tracking-IDs verwenden zu können, müssen Sie diese sowohl zu Ihrer Datenschutzrichtlinie als auch zu Ihren Nutzungsbedingungen hinzufügen, vorzugsweise unter der Überschrift Tracking . Wir werden die folgenden Tasten für beide document.cookieund verwenden window.localStorage:

  • _ga : Google Analytics-Daten
  • __utma : Google Analytics-Tracking-Cookie
  • sid : SessionID

Stellen Sie sicher, dass Sie auf allen Seiten, die Tracking verwenden, Links zu Ihren Datenschutzrichtlinien und Nutzungsbedingungen einfügen.

Wo speichere ich meine Sitzungsdaten?

Sie können Ihre Sitzungsdaten entweder in Ihrer Website-Datenbank oder auf dem Computer des Benutzers speichern. Da ich normalerweise auf kleineren Websites arbeite (mit weniger als 10.000 fortlaufenden Verbindungen), die Anwendungen von Drittanbietern (Google Analytics / Clicky / usw.) verwenden, ist es für mich am besten, Daten auf dem Computer des Clients zu speichern. Dies hat folgende Vorteile:

  1. Keine Datenbanksuche / Overhead / Laden / Latenz / Speicherplatz / etc.
  2. Benutzer können ihre Daten jederzeit löschen, ohne mir nervige E-Mails schreiben zu müssen.

und Nachteile:

  1. Daten müssen verschlüsselt / entschlüsselt und signiert / verifiziert werden, was einen CPU-Overhead auf dem Client (nicht so schlecht) und dem Server (bah!) Erzeugt.
  2. Daten werden gelöscht, wenn der Benutzer seine Cookies und seinen Cache löscht. (das ist was ich wirklich will)
  3. Daten sind für Analysen nicht verfügbar, wenn Benutzer offline gehen. (Analyse nur für Benutzer, die derzeit surfen)

UUIDS

  • BrowserID : Eindeutige ID, die aus der Benutzeragentenzeichenfolge des Browsers generiert wird.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : Wird aus der IP-Adresse und dem HTTPS-Sitzungsschlüssel des Benutzers generiert. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : JavaScript-basiertes Fingerprinting basierend auf einem modifizierten fingerprint.js .FingerPrint.get()
  • SessionID : Zufälliger Schlüssel, der generiert wird, wenn der Benutzer die Site zum ersten Mal besucht.BrowserID|ComputerID|randombytes(256)
  • GoogleID : Aus __utmaCookie generiert .getCookie(__utma).uniqueid

Mechanismus

Neulich habe ich mit meiner Freundin die Wendy Williams Show gesehen und war völlig entsetzt, als die Moderatorin ihren Zuschauern riet, ihren Browserverlauf mindestens einmal im Monat zu löschen. Das Löschen des Browserverlaufs hat normalerweise folgende Auswirkungen:

  1. Löscht den Verlauf der besuchten Websites.
  2. Löscht Cookies und window.localStorage(aww man).

Die meisten modernen Browser stellen diese Option zur Verfügung, fürchten jedoch keine Freunde. Denn es gibt eine Lösung. Der Browser verfügt über einen Caching-Mechanismus zum Speichern von Skripten / Bildern und anderen Dingen. Selbst wenn wir unseren Verlauf löschen, bleibt dieser Browser-Cache normalerweise bestehen. Wir brauchen nur eine Möglichkeit, unsere Daten hier zu speichern. Hierfür gibt es zwei Methoden. Das bessere ist, ein SVG-Bild zu verwenden und unsere Daten in seinen Tags zu speichern. Auf diese Weise können Daten auch dann extrahiert werden, wenn JavaScript mithilfe von Flash deaktiviert ist. Da dies jedoch etwas kompliziert ist, werde ich den anderen Ansatz demonstrieren, der JSONP ( Wikipedia ) verwendet.

example.com/assets/js/tracking.js (tatsächlich Tracking.php)

var now = new Date();
var window.__sid = "SessionID"; // Server generated

setCookie("sid", window.__sid, now.setFullYear(now.getFullYear() + 1, now.getMonth(), now.getDate() - 1));

if( "localStorage" in window ) {
  window.localStorage.setItem("sid", window.__sid);
}

Jetzt können wir jederzeit unseren Sitzungsschlüssel erhalten:

window.__sid || window.localStorage.getItem("sid") || getCookie("sid") || ""

Wie bringe ich tracking.js dazu, im Browser zu bleiben?

Dies können wir mit Cache-Control- , Last-Modified- und ETag- HTTP-Headern erreichen. Wir können den SessionIDas-Wert für den etag-Header verwenden:

setHeaders({
  "ETag": SessionID,
  "Last-Modified": new Date(0).toUTCString(),
  "Cache-Control": "private, max-age=31536000, s-max-age=31536000, must-revalidate"
})

Last-ModifiedDer Header teilt dem Browser mit, dass diese Datei grundsätzlich nie geändert wird. Cache-ControlWeist Proxys und Gateways an, das Dokument nicht zwischenzuspeichern, sondern den Browser anzuweisen, es 1 Jahr lang zwischenzuspeichern.

Das nächste Mal , wenn der Browser das Dokument anfordert, wird es senden If-Modified-Sinceund If-None-MatchHeader. Wir können diese verwenden, um eine 304 Not ModifiedAntwort zurückzugeben.

example.com/assets/js/tracking.php

$sid = getHeader("If-None-Match") ?: getHeader("if-none-match") ?: getHeader("IF-NONE-MATCH") ?: ""; 
$ifModifiedSince = hasHeader("If-Modified-Since") ?: hasHeader("if-modified-since") ?: hasHeader("IF-MODIFIED-SINCE");

if( validateSession($sid) ) {
  if( sessionExists($sid) ) {
    continueSession($sid);
    send304();
  } else {
    startSession($sid);
    send304();
  }
} else if( $ifModifiedSince ) {
  send304();
} else {
  startSession();
  send200();
}

Jedes Mal, wenn der Browser dies anfordert, antwortet tracking.jsunser Server mit einem 304 Not ModifiedErgebnis und erzwingt die Ausführung der lokalen Kopie von tracking.js.

Ich verstehe immer noch nicht. Erklären Sie es mir

Nehmen wir an, der Benutzer löscht seinen Browserverlauf und aktualisiert die Seite. Das einzige, was auf dem Computer des Benutzers übrig bleibt, ist eine Kopie tracking.jsim Browser-Cache. Wenn der Browser dies anfordert tracking.js, erhält er eine 304 Not ModifiedAntwort, die dazu führt, dass er die erste empfangene Version ausführt tracking.js. tracking.jsführt das SessionIDgelöschte aus und stellt es wieder her.

Validierung

Angenommen, Haxor X stiehlt unseren Kunden Cookies, während sie noch angemeldet sind. Wie schützen wir sie? Kryptographie und Browser-Fingerabdruck zur Rettung. Denken Sie daran, unsere ursprüngliche Definition für SessionIDwar:

BrowserID|ComputerID|randomBytes(256)

Wir können dies ändern in:

Timestamp|BrowserID|ComputerID|encrypt(randomBytes(256), hk)|sign(Timestamp|BrowserID|ComputerID|randomBytes(256), hk)

Wo hk = sign(Timestamp|BrowserID|ComputerID, serverKey).

Jetzt können wir unsere SessionIDmit dem folgenden Algorithmus validieren :

if( getTimestamp($sid) is older than 1 year ) return false;
if( getBrowserID($sid) !== createBrowserID($_Request, $_Server) ) return false;
if( getComputerID($sid) !== createComputerID($_Request, $_Server) return false;

$hk = sign(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid), $SERVER["key"]);

if( !verify(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid) + decrypt(getRandomBytes($sid), hk), getSignature($sid), $hk) ) return false;

return true; 

Damit Haxors Angriff funktioniert, müssen sie:

  1. Habe dasselbe ComputerID. Das bedeutet, dass sie denselben ISP-Anbieter wie das Opfer haben müssen (Tricky). Dies gibt unserem Opfer die Möglichkeit, rechtliche Schritte im eigenen Land einzuleiten. Haxor muss auch den HTTPS-Sitzungsschlüssel vom Opfer erhalten (schwer).
  2. Habe dasselbe BrowserID. Jeder kann die User-Agent-Zeichenfolge fälschen (ärgerlich).
  3. Seien Sie in der Lage, ihre eigene Fälschung zu erstellen SessionID(sehr schwer). Volume-Angriffe funktionieren nicht, da wir einen Zeitstempel verwenden, um einen Verschlüsselungs- / Signaturschlüssel zu generieren. Im Grunde ist es so, als würde für jede Sitzung ein neuer Schlüssel generiert. Darüber hinaus verschlüsseln wir zufällige Bytes, sodass ein einfacher Wörterbuchangriff ebenfalls nicht in Frage kommt.

Wir können die Validierung verbessern, indem wir GoogleIDund FingerprintID(über Ajax oder versteckte Felder) weiterleiten und mit diesen abgleichen.

if( GoogleID != getStoredGoodleID($sid) ) return false;
if( byte_difference(FingerPrintID, getStoredFingerprint($sid) > 10%) return false;

1
Das ist übrigens eine schöne Antwort. So viele Informationen. Ich bin überrascht, dass Sie keine positiven Stimmen mehr haben. Ich kann ehrlich gesagt nicht glauben, dass die Technik mit svgs und jsonp existiert, aber es muss. Gibt es keine Bibliothek, die auf eine solche Technik zurückgreift, wenn Cookies / localStorage / sessionStorage deaktiviert sind?
faceyspacey.com

Ich frage mich auch, ob es eine erweiterte Version davon gibt, mit der Sie einfach Ihre zwischengespeicherte Datei trace.js (oder mehrere solcher Dateien) als im Wesentlichen localStorage / Cookies verwenden können, dh um sich viele Daten zu merken. Die Idee wäre, dass eine Bibliothek Methoden wie storageFacade.setItemund storageFacade.getItem . And it tries to use localStorage, but fallsback to your technique when disabled. ..Perhaps the way it works is via a single file for "diffs" i.e. each time you call setItem . And then a manifest` aller während der Sitzung erstellten Diffs enthält, die von Zeit zu Zeit automatisch erstellt werden.
faceyspacey.com

Wenn das Manifest nur gelegentlich erstellt würde, würde dies im Wesentlichen die Anzahl der erstellten Manifeste begrenzen. Und später in Javascript könnten Sie versuchen, alle möglichen erstellten Manifeste anzufordern und dann das neueste verwenden, um den Status aus den Diff-Snapshots wiederherzustellen. Wenn wir nur Unterschiede hätten, könnte es Hunderte oder Tausende geben, und das könnte ein Leistungsproblem sein, wenn versucht wird, sie alle abzurufen, bis einer fehlschlägt. Dh Sie rufen das Diff oder Manifest schrittweise ab: manifest-1.js, manifest-2.js usw., bis eines fehlschlägt (weil es nicht existiert). Was bedeutet, dass Sie alle Manifeste (oder Unterschiede) haben
faceyspacey.com

@ faceyspacey.com Sorry, keine Bibliotheken jemals. Sie müssen Ihre eigene benutzerdefinierte Lösung codieren und ständig aktualisieren. Denk darüber nach. Sobald Sie eine Bibliothek dafür entwickeln, würden alle Add-Blocker / Browser / etc sofort dagegen vorgehen. Der einzige Grund, warum dies funktioniert, ist, dass es sich auf eine sehr wichtige Kernbrowserfunktion stützt, die einfach nicht entfernt / deaktiviert werden kann: CACHING. Ich verliere immer wieder meine Logins und Passwörter. Und da ich nicht mehr viele Fragen stelle, muss ich nicht mehr viele beantworten, damit ich Kopfgelder mit Ruf hinterlassen kann. Ich habe das gerade gesehen und festgestellt, dass es keine wirkliche Antwort gibt.
Walter

30

Es ist nicht möglich, die Computer zu identifizieren, die auf eine Website zugreifen, ohne die Mitarbeit ihrer Eigentümer. Wenn Sie dies jedoch zulassen, können Sie ein Cookie speichern, um den Computer zu identifizieren, wenn er Ihre Site erneut besucht. Der Schlüssel ist, der Besucher hat die Kontrolle; Sie können das Cookie entfernen und jederzeit als neuer Besucher angezeigt werden.


7
Wenn er Ihre Website mit 3 verschiedenen Browsern besucht, hat er 3 verschiedene Cookies, da Cookies nicht zwischen Apps geteilt werden. Wenn er DHCP anstelle einer statischen IP-Adresse verwendet, hat er wahrscheinlich nicht lange dieselbe IP-Adresse für seinen Computer.
JohnnySoftware

2
Ja und nein. Browser-Fingerabdrücke identifizieren ein Browserprofil mit hoher Wahrscheinlichkeit, aber es ist nicht die absolute Eins-zu-Eins-Identifikation, die in dieser Frage angestrebt wird. Es ist auch ziemlich einfach (aber vielleicht nicht einfach ) für einen versierten Benutzer, absichtlich zu umgehen, wenn er dies wünscht.
Erickson

30

Eine Möglichkeit ist die Verwendung von Flash-Cookies :

  • Allgegenwärtige Verfügbarkeit (95 Prozent der Besucher werden wahrscheinlich Flash haben)
  • Sie können mehr Daten pro Cookie speichern (bis zu 100 KB).
  • Wird über mehrere Browser hinweg geteilt, sodass eine Maschine mit größerer Wahrscheinlichkeit eindeutig identifiziert werden kann
  • Durch das Löschen der Browser-Cookies werden die Flash-Cookies nicht entfernt.

Sie müssen einen kleinen (versteckten) Flash-Film erstellen, um sie lesen und schreiben zu können.

Egal für welche Route Sie sich entscheiden, stellen Sie sicher, dass Ihre Benutzer sich dafür entscheiden, verfolgt zu werden. Andernfalls verletzen Sie ihre Privatsphäre und werden zu einem der Bösen.


5
Viele Benutzer verwenden Flashblock. Flash wird vom Benutzer mit einem Klick aktiviert, wenn er es sehen möchte.
Horcrux7

3
Es gibt Methoden zum Entfernen der Cookies, die jedoch über den durchschnittlichen Benutzer hinausgehen. Auf der Adobe-Website finden Sie Seiten zum Anzeigen und Entfernen von LSOs (Local Shared Object en.wikipedia.org/wiki/Local_Shared_Object ). Für Firefox-Benutzer ist das Objection-Add-On jedoch die einfachste Methode, um sie zu entfernen
Sam Hasler,

Ich denke, das ist eine der besten Lösungen. Youtube, Google usw. verwenden LSOs, um Missbrauch zu bekämpfen.
Uku Loskit

4
Flash-Cookies können in modernen Versionen von Firefox und Chrome genauso einfach gelöscht werden wie HTTP-Cookies: Wikipedia :Adobe announced that Flash Player 10.3 enables Mozilla Firefox 4 and "future releases of Apple Safari and Google Chrome" to delete local shared objects,[11] so since version 4, Firefox treats LSOs the same way as HTTP cookies - deletion rules that previously applied only to HTTP cookies now also apply to LSOs.
JoJo

4
Die Situation hat sich in den letzten neun Jahren geändert. Heutzutage sind 95 Prozent der Benutzer nicht einmal auf dem Desktop, und auf Mobilgeräten wurde Adobe Flash Player nie wirklich angenommen.
Damian Yerrick

21

Möglicherweise möchten Sie versuchen, eine eindeutige ID in einem Evercookie festzulegen (dies funktioniert browserübergreifend, siehe FAQs): http://samy.pl/evercookie/

Es gibt auch eine Firma namens ThreatMetrix, die von vielen großen Unternehmen verwendet wird, um dieses Problem zu lösen: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Sie sind ziemlich teuer und einige von ihnen Ihre anderen Produkte sind nicht sehr gut, aber ihre Geräte-ID funktioniert gut.

Schließlich gibt es diese Open-Source-JQuery-Implementierung der Panopticlick-Idee: https://github.com/carlo/jquery-browser-fingerprint Sie sieht im Moment ziemlich halbherzig aus, könnte aber erweitert werden.

Ich hoffe es hilft!


+ 1 - Brian - Tolle Informationen! Dies alles hat sich als sehr nützlich erwiesen. Danke. Fügen Sie weitere Informationen hinzu, wenn Sie seitdem nichts mehr gelernt haben.
Ben O

1
In Bezug auf Evercookie. Versucht mit Opera. Setzen Sie Cookies, löschen Sie dann den gesamten Verlauf aus Opera, schließen Sie Opera, öffnen Sie erneut, klicken Sie auf Click to rediscover cookiesund sehen Sie entweder null oder undefiniert. Das funktioniert also nicht für mich
Andris

Versucht die Beispielseite mit iOS Safari Private-Modus und Desktop Chrome inkognito, kann das Cookie nach dem Neustart des Browsers nicht abgerufen werden.
Morio

20

Es gibt eine beliebte Methode namens Canvas Fingerprinting, die in diesem wissenschaftlichen Artikel beschrieben wird: Das Web vergisst nie: Persistente Verfolgungsmechanismen in freier Wildbahn . Sobald Sie danach suchen, werden Sie überrascht sein, wie häufig es verwendet wird. Die Methode erstellt einen eindeutigen Fingerabdruck, der für jede Browser / Hardware-Kombination konsistent ist.

In diesem Artikel werden auch andere dauerhafte Tracking-Methoden wie Evercookies, das erneute Aufrufen von http- und Flash-Cookies sowie die Synchronisierung von Cookies beschrieben.

Weitere Informationen zum Fingerabdruck auf Leinwand finden Sie hier:


1
Wenn also zwei Geräte identisch sind (dieselben Batch-Computer, dasselbe Betriebssystem, dieselben Browser), sind die Fingerabdrücke gleich, oder?
Xiaoyu2er

Die eigentliche Frage hier ist, wo die Javascript-Bibliothek ist, die ich in meinen Code einfügen kann, um dies zu verwenden. Das Lesen einer Menge Theorie löst keine Probleme, die innerhalb der nächsten 60 Minuten gelöst werden müssen.
Thanasis Ioannidis

11

Es gibt nur eine kleine Menge an Informationen, die Sie über eine HTTP-Verbindung erhalten können.

  1. IP - Aber wie andere gesagt haben, ist dies aufgrund der dynamischen Zuweisungsrichtlinien ihres ISP für viele, wenn nicht die meisten Internetnutzer nicht behoben.

  2. Useragent String - Nahezu alle Browser senden bei jeder Anfrage, welche Art von Browser sie sind. Dies kann jedoch heute in vielen Browsern vom Benutzer eingestellt werden.

  3. Sammlung von Anforderungsfeldern - Mit jeder Anforderung werden andere Felder gesendet, z. B. unterstützte Codierungen usw. Diese können, wenn sie im Aggregat verwendet werden, zur Identifizierung des Computers eines Benutzers beitragen, sind jedoch wiederum browserabhängig und können geändert werden.

  4. Cookies - Das Setzen eines Cookies ist eine weitere Möglichkeit, einen Computer oder insbesondere einen Browser auf einem Computer zu identifizieren. Wie andere bereits gesagt haben, können diese von den Benutzern gelöscht oder deaktiviert werden und gelten nur für einen Browser, nicht für einen Maschine.

Die richtige Antwort lautet also, dass Sie nicht allein über die HTTP-over-IP-Protokolle erreichen können, was Sie leben würden. Wenn Sie jedoch eine Kombination aus Cookies sowie IP und den Feldern in der HTTP-Anforderung verwenden, haben Sie gute Chancen zu erraten, um welchen Computer es sich handelt. Benutzer verwenden in der Regel nur einen Browser und häufig von einem Computer aus. Daher ist dies möglicherweise ziemlich zuverlässig. Dies hängt jedoch von der Zielgruppe ab. Techniker können sich eher mit diesem Material herumschlagen und mehr Computer / Browser verwenden. Darüber hinaus könnte dies sogar mit einem Versuch verbunden sein, die IP-Adresse zu lokalisieren und diese Daten ebenfalls zu verwenden. Aber auf jeden Fall gibt es keine Lösung, die immer richtig ist.


10

Es gibt Fehler sowohl bei Cookie- als auch bei Nicht-Cookie-Ansätzen. Wenn Sie jedoch die Mängel des Cookie-Ansatzes verzeihen können, finden Sie hier eine Idee.

Wenn Sie Google Analytics bereits auf Ihrer Website verwenden, müssen Sie keinen Code schreiben, um eindeutige Benutzer selbst zu verfolgen. Google Analytics erledigt dies für Sie über den __utmaCookie-Wert, wie in der Dokumentation von Google beschrieben . Wenn Sie diesen Wert wiederverwenden, erstellen Sie keine zusätzlichen Cookie-Nutzdaten, was bei Seitenanforderungen Effizienzvorteile bietet.

Und Sie können leicht genug Code schreiben, um auf diesen Wert zuzugreifen, oder die getUniqueId() Funktion dieses Skripts verwenden.


Bekomme ich dieselbe ID getUniqueId()in verschiedenen Browsern auf demselben Computer?
Ankur Akvaliya

8

Wie bei den vorherigen Lösungen sind Cookies eine gute Methode. Beachten Sie jedoch, dass sie Browser identifizieren . Wenn ich eine Website in Firefox und dann in Internet Explorer besuche, werden Cookies für beide Versuche separat gespeichert. Einige Benutzer deaktivieren auch Cookies (aber mehr Benutzer deaktivieren JavaScript).

Eine andere zu berücksichtigende Methode wäre die Identifizierung von IP- und Hostnamen (beachten Sie, dass diese für DFÜ- / nicht statische IP-Benutzer variieren können, AOL verwendet auch pauschale IPs). Da dies jedoch nur Netzwerke identifiziert, funktioniert dies möglicherweise nicht so gut wie Cookies.


Guter Punkt mit der IP-Adresse, die den Zugangspunkt zum Netzwerk identifiziert - mit NAT könnten ganze Länder hinter einer einzigen IP-Adresse versteckt sein, und Sie wären nicht klüger. Aufgrund des Mangels an IPv4-Adressen sehen Sie immer noch ziemlich große Unternehmen oder Schulen / Universitäten, die eine einzige IP-Adresse für den ausgehenden Internetverkehr gemeinsam nutzen.
Piskvor verließ das Gebäude

6

Abgesehen von den Vorschlägen zur Verwendung von Cookies sind die einzigen umfassenden Identifizierungsattribute, die zum Abfragen verfügbar sind, im HTTP-Anforderungsheader enthalten. Es ist also möglich, eine Teilmenge davon zu verwenden, um eine pseudo-eindeutige Kennung für einen Benutzeragenten (dh einen Browser) zu erstellen. Darüber hinaus werden die meisten dieser Informationen möglicherweise bereits standardmäßig im sogenannten "Zugriffsprotokoll" Ihrer Webserver-Software protokolliert und können, falls nicht, einfach dafür konfiguriert werden. Dann könnte eine Utlity entwickelt werden, die einfach den Inhalt dieses Protokolls scannt und Fingerabdrücke erstelltvon jeder Anforderung, die beispielsweise aus der IP-Adresse und der Zeichenfolge des Benutzeragenten usw. besteht. Je mehr Daten verfügbar sind, einschließlich des Inhalts bestimmter Cookies, desto höher ist die Qualität der Einzigartigkeit dieses Fingerabdrucks. Obwohl, wie viele andere bereits festgestellt haben, das HTTP-Protokoll dies nicht zu 100% narrensicher macht - bestenfalls kann es nur ein ziemlich guter Indikator sein.


6

Wenn ich einen Computer benutze, der meine Online-Banking-Website noch nie besucht hat, werde ich um zusätzliche Authentifizierung gebeten. Wenn ich dann ein zweites Mal zur Online-Banking-Website zurückkehre, werde ich nicht nach der zusätzlichen Authentifizierung gefragt ... Ich habe alle Cookies im IE gelöscht und mich erneut auf meiner Online-Banking-Website angemeldet, in der Erwartung, dass mir die Authentifizierungsfragen erneut gestellt werden. Zu meiner Überraschung wurde ich nicht gefragt. führt dies nicht zu der Annahme, dass die Bank eine Art PC-Tagging durchführt, bei dem es sich nicht um Cookies handelt?

Dies ist eine ziemlich häufige Art der Authentifizierung, die von Banken verwendet wird.

Angenommen, Sie greifen über example-isp.com auf Ihre Bank-Website zu. Wenn Sie das erste Mal dort sind, werden Sie nach Ihrem Passwort sowie nach einer zusätzlichen Authentifizierung gefragt. Sobald Sie bestanden haben, weiß die Bank, dass der Benutzer "thatisvaliant" authentifiziert ist, um über example-isp.com auf die Website zuzugreifen.

In Zukunft wird keine zusätzliche Authentifizierung (über Ihr Passwort hinaus) angefordert, wenn Sie über example-isp.com auf die Website zugreifen. Wenn Sie versuchen, über another-isp.com auf die Bank zuzugreifen, durchläuft die Bank dieselbe Routine erneut.

Zusammenfassend lässt sich sagen, dass die Bank Ihren ISP und / oder Netblock anhand Ihrer IP-Adresse identifiziert. Offensichtlich sind nicht jeder Benutzer bei Ihrem ISP Sie, weshalb die Bank Sie immer noch nach Ihrem Passwort fragt.

Haben Sie jemals einen Anruf bei einem Kreditkartenunternehmen erhalten, um zu überprüfen, ob alles in Ordnung ist, wenn Sie eine Kreditkarte in einem anderen Land verwenden? Gleiches Konzept.


4

Wirklich, was Sie tun möchten, kann nicht getan werden, da die Protokolle dies nicht zulassen. Wenn statische IPs universell verwendet würden, könnten Sie dies möglicherweise tun. Sie sind es nicht, also kannst du es nicht.

Wenn Sie wirklich identifizieren wollen Menschen , haben sie log in.

Da sie wahrscheinlich auf verschiedene Seiten Ihrer Website verschoben werden, müssen Sie eine Möglichkeit haben, sie zu verfolgen, während sie sich bewegen.

Solange sie angemeldet sind und Sie ihre Sitzung auf Ihrer Website über Cookies / Link-Parameter / Beacons / was auch immer verfolgen, können Sie ziemlich sicher sein, dass sie während dieser Zeit denselben Computer verwenden.

Letztendlich ist es falsch zu sagen, dass dies Ihnen sagt, welchen Computer sie verwenden, wenn Ihre Benutzer nicht Ihr eigenes lokales Netzwerk verwenden und keine statischen IP-Adressen haben.

Wenn Sie in Zusammenarbeit mit den Benutzern arbeiten möchten und nur ein Benutzer pro Cookie vorhanden ist und dieser einen einzelnen Webbrowser verwendet, verwenden Sie einfach ein Cookie.


3

Cookies sind nicht nützlich, um eindeutige Besucher zu ermitteln. Ein Benutzer kann Cookies löschen und die Website aktualisieren. Anschließend wird er erneut als neuer Benutzer eingestuft.

Ich denke, dass der beste Weg, dies zu tun, darin besteht, eine serverseitige Lösung zu implementieren (da Sie irgendwo etwas zum Speichern Ihrer Daten benötigen). Abhängig von der Komplexität Ihrer Anforderungen an solche Daten müssen Sie festlegen, was als eindeutiger Besuch eingestuft wird. Eine sinnvolle Methode wäre es, einer IP-Adresse zu erlauben, am nächsten Tag zurückzukehren und einen eindeutigen Besuch zu erhalten. Mehrere Besuche von einer IP-Adresse an einem Tag sollten nicht als eindeutig gewertet werden.

Mit PHP ist es beispielsweise trivial, die IP-Adresse eines Besuchers abzurufen und in einer Textdatei (oder einer SQL-Datenbank) zu speichern.

Eine serverseitige Lösung funktioniert auf allen Computern, da Sie den Benutzer verfolgen, wenn er Ihre Site zum ersten Mal lädt. Verwenden Sie kein Javascript, da dies für clientseitiges Scripting gedacht ist und der Benutzer es möglicherweise auf jeden Fall deaktiviert hat.

Hoffentlich hilft das.


4
Meine Frau und ich surfen von vier verschiedenen Computern hinter einer NAT-Firewall zu Hause. Wir haben dieselbe IP-Adresse, daher werden wir nach Ihrem Schema als derselben Benutzer angezeigt.
Adam Ness

Was ist, wenn in MySQL zusätzliche Variablen geschrieben werden sollen (hier panopticlick.eff.org/browser-uniqueness.pdf erwähnt )? Die IP-Adresse wäre also dieselbe, aber einige andere Merkmale können unterschiedlich sein.
Andris

3

Da ich möchte, dass die Lösung auf allen Computern und in allen Browsern funktioniert (im Rahmen des Zumutbaren), versuche ich, eine Lösung mit Javascript zu erstellen.

Ist das nicht ein wirklich guter Grund, kein Javascript zu verwenden?

Wie andere gesagt haben - Cookies sind wahrscheinlich die beste Option - beachten Sie nur die Einschränkungen.


3

Sie können fingerprintjs2 verwenden

new Fingerprint2().get(function(result, components) {
  console.log(result) // a hash, representing your device fingerprint
  console.log(components) // an array of FP components
  //submit hash and JSON object to the server 
})

Danach können Sie alle Ihre Benutzer mit vorhandenen und JSON-Ähnlichkeiten vergleichen. Selbst wenn ihr Fingerabdruck mutiert, können Sie sie dennoch verfolgen


2

Ich denke, das Urteil lautet, dass ich einen Computer, der meine Website besucht, nicht programmgesteuert eindeutig identifizieren kann.

Ich habe die folgende Frage. Wenn ich einen Computer benutze, der meine Online-Banking-Website noch nie besucht hat, werde ich um zusätzliche Authentifizierung gebeten. Wenn ich dann ein zweites Mal zur Online-Banking-Website zurückkehre, werde ich nicht nach der zusätzlichen Authentifizierung gefragt. Als ich die Antworten auf meine Frage las, entschied ich, dass es sich um einen Cookie handeln muss. Daher habe ich alle Cookies im IE gelöscht und mich erneut auf meiner Online-Banking-Website angemeldet, in der Erwartung, dass mir die Authentifizierungsfragen erneut gestellt werden. Zu meiner Überraschung wurde ich nicht gefragt. führt dies nicht zu der Annahme, dass die Bank eine Art PC-Tagging durchführt, bei dem es sich nicht um Cookies handelt?

Nachdem ich heute viel gegoogelt hatte, fand ich die folgende Firma, die behauptet, eine Lösung zu verkaufen, die Maschinen, die eine Website besuchen, eindeutig identifiziert. http://www.the41.com/products.asp .

Ich schätze all die guten Informationen, wenn Sie diese widersprüchlichen Informationen, die ich gefunden habe, weiter klären könnten. Ich würde es sehr schätzen.


Basierend darauf: the41.com/download/… Es sieht so aus, als ob ihre Lösung darin besteht, den Benutzer dazu zu bringen, eine Software herunterzuladen, die eine eindeutige Kennung basierend auf dem Computer erstellt und diese mit einigen Anmeldeinformationen verknüpft.
mmacaulay

Wie bereits erwähnt, haben Sie Ihre Bank mit einem Flash-Cookie nicht ausgeschlossen. So löschen Sie Flash-Cookies und andere Diskussionen zu diesem Problem: tips.vlaurie.com/2007/10/24/…
micahwittman

Meine Vermutung: Die Bank vertraut wahrscheinlich darauf, dass Sie Sie sind, wenn Sie (1) Ihren Benutzernamen kennen, (2) Ihr Passwort kennen und entweder (3a) ihren Cookie haben oder (3b) von einer IP-Adresse stammen, die sie zuvor hatten mit Ihnen verbunden.
Zack Peterson

2

Ich würde dies mit einer Kombination aus Cookies und Flash-Cookies tun. Erstellen Sie eine GUID und speichern Sie sie in einem Cookie. Wenn das Cookie nicht vorhanden ist, versuchen Sie, es aus dem Flash-Cookie zu lesen. Wenn es immer noch nicht gefunden wird, erstellen Sie es und schreiben Sie es in das Flash-Cookie. Auf diese Weise können Sie dieselbe GUID für alle Browser freigeben.


1

Ich denke, Cookies könnten das sein, wonach Sie suchen. Auf diese Weise identifizieren die meisten Websites Besucher eindeutig.


0

Angenommen, Sie möchten nicht, dass der Benutzer die Kontrolle hat, können Sie dies nicht. Das Web funktioniert so nicht, das Beste, auf das Sie hoffen können, sind einige Heuristiken.

Wenn es eine Option ist, Ihren Besucher zu zwingen, Software zu installieren und TCPA zu verwenden, können Sie möglicherweise etwas herausholen.


0

Mein Beitrag ist möglicherweise keine Lösung, aber ich kann ein Beispiel angeben, in dem diese Funktion implementiert wurde.

Wenn Sie die Anmeldeseite von www.supertorrents.orgzum ersten Mal von Ihrem Computer aus besuchen , ist dies in Ordnung. Wenn Sie die Seite jedoch aktualisieren oder erneut öffnen, wird angezeigt, dass Sie die Seite zuvor besucht haben. Die wahre Schönheit kommt hierher - sie wird identifiziert, selbst wenn Sie Windows oder ein anderes Betriebssystem neu installieren.

Ich habe irgendwo gelesen, dass sie die CPU-ID speichern. Obwohl ich nicht finden konnte, wie sie es machen, bezweifle ich es ernsthaft und sie könnten die MAC-Adresse verwenden, um es zu machen.

Ich werde auf jeden Fall teilen, wenn ich finde, wie es geht.


www.supertorrents.org ist tot
Toolkit

0

Ein Trick:

  1. Erstellen Sie 2 Registrierungsseiten:

    Erste Registrierungsseite: ohne E-Mail oder Sicherheitsüberprüfung (nur mit Benutzername und Passwort)

    Zweite Registrierungsseite: mit hoher Sicherheitsstufe (E-Mail-Bestätigungsanfrage und Sicherheitsimage usw.)

  2. Für die Kundenzufriedenheit und eine einfache Registrierung sollte die Standardregistrierungsseite die (Erste Registrierungsseite) sein, aber auf der (Ersten Registrierungsseite) gibt es eine versteckte Einschränkung. Es ist IP-Einschränkung. Wenn eine IP versucht hat, sich zum zweiten Mal zu registrieren (z. B. weniger als 1 Stunde), anstatt die Blockierungsseite anzuzeigen. Sie können die (Zweite Registrierungsseite) automatisch anzeigen.

  3. Auf der (ersten Registrierungsseite) können Sie festlegen (zum Beispiel: Blockieren von 2 Versuchen von 1 IP für nur 1 Stunde oder 24 Stunden) und nach (zum Beispiel) 1 Stunde können Sie den Zugriff von dieser IP automatisch öffnen

Bitte beachten Sie: (Erste Registrierungsseite) und (Zweite Registrierungsseite) sollten nicht auf getrennten Seiten stehen. Sie machen nur 1 Seite. (zum Beispiel: register.php) und machen Sie es intelligent, zwischen dem ersten PHP-Stil und dem zweiten PHP-Stil zu wechseln


Mahdi Jazini. Alle haben Recht, aber meine Frage ist, wie Sie die IP-Adresse des Client-Computers identifizieren. Danke.
JENKINS J
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.