Ich erstelle ein Analysetool und kann derzeit die IP-Adresse, den Browser und das Betriebssystem des Benutzers von seinem Benutzeragenten abrufen.
Ich frage mich, ob es eine Möglichkeit gibt, denselben Benutzer zu erkennen, ohne Cookies oder lokalen Speicher zu verwenden. Ich erwarte hier keine Codebeispiele. nur ein einfacher Hinweis, wo man weiter suchen muss.
Ich habe vergessen zu erwähnen, dass es browserübergreifend kompatibel sein muss, wenn es sich um denselben Computer / dasselbe Gerät handelt. Grundsätzlich bin ich nach Geräteerkennung nicht wirklich der Benutzer.
javascript
php
http-headers
fingerprinting
slash197
quelle
quelle
Antworten:
Einführung
Wenn ich Sie richtig verstehe, müssen Sie einen Benutzer identifizieren, für den Sie keine eindeutige Kennung haben. Sie möchten also herausfinden, wer er ist, indem Sie zufällige Daten abgleichen. Sie können die Identität des Benutzers nicht zuverlässig speichern, weil:
Ein Java-Applet oder Com-Objekt wäre eine einfache Lösung mit einem Hash von Hardwareinformationen gewesen, aber heutzutage sind die Benutzer so sicherheitsbewusst, dass es schwierig ist, Benutzer dazu zu bringen, diese Art von Programmen auf ihrem System zu installieren. Dies führt dazu, dass Sie keine Cookies und andere ähnliche Tools verwenden müssen.
Cookies und andere ähnliche Tools
Sie können ein Datenprofil erstellen und dann mithilfe von Wahrscheinlichkeitstests einen wahrscheinlichen Benutzer identifizieren . Ein hierfür nützliches Profil kann durch eine Kombination der folgenden Elemente erstellt werden:
Die von mir aufgelisteten Elemente sind natürlich nur einige Möglichkeiten, wie ein Benutzer eindeutig identifiziert werden kann. Es gibt viele mehr.
Wie geht es mit diesem Satz zufälliger Datenelemente weiter, aus denen ein Datenprofil erstellt werden soll?
Der nächste Schritt ist die Entwicklung einer Fuzzy-Logik oder, noch besser, eines künstlichen neuronalen Netzwerks (das Fuzzy-Logik verwendet). In beiden Fällen besteht die Idee darin, Ihr System zu trainieren und dann sein Training mit Bayesian Inference zu kombinieren , um die Genauigkeit Ihrer Ergebnisse zu erhöhen.
Mit der NeuralMesh- Bibliothek für PHP können Sie künstliche neuronale Netze generieren. Überprüfen Sie die folgenden Links, um die Bayes'sche Inferenz zu implementieren:
An diesem Punkt denken Sie vielleicht:
Warum so viel Mathematik und Logik für eine scheinbar einfache Aufgabe?
Grundsätzlich, weil es keine einfache Aufgabe ist . Was Sie erreichen möchten, ist in der Tat reine Wahrscheinlichkeit . Zum Beispiel bei folgenden bekannten Benutzern:
Wenn Sie folgende Daten erhalten:
Die Frage, die Sie im Wesentlichen stellen, lautet:
Wie groß ist die Wahrscheinlichkeit, dass die empfangenen Daten (B + C + E + G + F + K) tatsächlich Benutzer1 oder Benutzer2 sind? Und welches dieser beiden Spiele ist am wahrscheinlichsten?
Um diese Frage effektiv beantworten zu können, müssen Sie das Format Frequenz gegen Wahrscheinlichkeit verstehen und wissen, warum die gemeinsame Wahrscheinlichkeit ein besserer Ansatz sein könnte. Die Details sind zu umfangreich, um hier näher darauf einzugehen (weshalb ich Ihnen Links gebe), aber ein gutes Beispiel wäre eine Anwendung des Assistenten für medizinische Diagnosen , die eine Kombination von Symptomen verwendet, um mögliche Krankheiten zu identifizieren.
Stellen Sie sich für einen Moment die Reihe von Datenpunkten vor, aus denen Ihr Datenprofil (B + C + E + G + F + K im obigen Beispiel) als Symptome und unbekannte Benutzer als Krankheiten besteht . Indem Sie die Krankheit identifizieren, können Sie eine geeignete Behandlung identifizieren (behandeln Sie diesen Benutzer als Benutzer1).
Offensichtlich ist eine Krankheit, für die wir mehr als ein Symptom identifiziert haben, leichter zu identifizieren. Je mehr Symptome wir identifizieren können, desto einfacher und genauer ist unsere Diagnose.
Gibt es noch andere Alternativen?
Natürlich. Als alternative Maßnahme können Sie Ihren eigenen einfachen Bewertungsalgorithmus erstellen und ihn auf exakten Übereinstimmungen basieren. Dies ist nicht so effizient wie die Wahrscheinlichkeit, kann jedoch für Sie einfacher zu implementieren sein.
Betrachten Sie als Beispiel diese einfache Punktetabelle:
Vergeben Sie für jede Information, die Sie auf eine bestimmte Anfrage sammeln können, die zugehörige Punktzahl und verwenden Sie dann Wichtigkeit , um Konflikte zu lösen, wenn die Punktzahlen gleich sind.
Konzeptioneller Beweiß
Für einen einfachen Proof of Concept werfen Sie bitte einen Blick auf Perceptron . Perceptron ist ein RNA-Modell , das im Allgemeinen in Mustererkennungsanwendungen verwendet wird. Es gibt sogar eine alte PHP-Klasse, die sie perfekt implementiert, aber Sie müssten sie wahrscheinlich für Ihre Zwecke ändern.
Obwohl Perceptron ein großartiges Tool ist, kann es dennoch mehrere Ergebnisse (mögliche Übereinstimmungen) zurückgeben. Daher ist die Verwendung eines Vergleichs von Punktzahl und Differenz immer noch nützlich, um die besten dieser Übereinstimmungen zu ermitteln.
Annahmen
Erwartung
Code für Proof of Concept
Ausgabe:
Print_r von "D":
Wenn Debug = true, können Sie Eingabe (Sensor & Gewünscht), Anfangsgewichte, Ausgabe (Sensor, Summe, Netzwerk), Fehler, Korrektur und Endgewichte anzeigen .
x1 bis x20 repräsentieren die vom Code konvertierten Features.
Hier ist eine Online-Demo
Verwendete Klasse:
Modifizierte Perceptron-Klasse
Fazit
Das Identifizieren eines Benutzers ohne eindeutige Kennung ist keine einfache oder einfache Aufgabe. Dies hängt davon ab, ob eine ausreichende Menge zufälliger Daten erfasst wird, die Sie mit verschiedenen Methoden vom Benutzer erfassen können.
Selbst wenn Sie sich dafür entscheiden, kein künstliches neuronales Netzwerk zu verwenden, empfehle ich, zumindest eine einfache Wahrscheinlichkeitsmatrix mit Prioritäten und Wahrscheinlichkeiten zu verwenden - und ich hoffe, dass der Code und die Beispiele oben Ihnen genug geben, um fortzufahren.
quelle
Implement Bayesian inference using PHP
, alle 3 Teile. -Frequency vs Probability
-Joint Probability
-Input (Sensor & Desired), Initial Weights, Output (Sensor, Sum, Network), Error, Correction and Final Weights
Diese Technik (um dieselben Benutzer ohne Cookies oder sogar ohne IP-Adresse zu erkennen) wird als Browser-Fingerabdruck bezeichnet . Grundsätzlich crawlen Sie so viele Informationen wie möglich über den Browser - bessere Ergebnisse können mit Javascript, Flash oder Java erzielt werden (z. B. installierte Erweiterungen, Schriftarten usw.). Danach können Sie die gehashten Ergebnisse speichern, wenn Sie möchten.
Es ist nicht unfehlbar, aber:
Mehr Info:
quelle
Der oben erwähnte Fingerabdruck funktioniert, kann aber dennoch zu Kollisionen führen.
Eine Möglichkeit besteht darin, der URL jeder Interaktion mit dem Benutzer eine UID hinzuzufügen.
http://someplace.com/12899823/user/profile
Wobei jeder Link auf der Site mit diesem Modifikator angepasst wird. Es ähnelt der Art und Weise, wie ASP.Net mit FORM-Daten zwischen Seiten gearbeitet hat.
quelle
Hast du dir Evercookie angesehen ? Es kann in allen Browsern funktionieren oder nicht. Ein Auszug aus ihrer Website.
"Wenn ein Benutzer in einem Browser gekocht wird und zu einem anderen Browser wechselt, wird der Cookie in beiden Browsern reproduziert, solange er noch das Cookie" Lokales gemeinsames Objekt "hat."
quelle
Sie könnten dies mit einem zwischengespeicherten PNG tun, es wäre etwas unzuverlässig (verschiedene Browser verhalten sich unterschiedlich und es schlägt fehl, wenn der Benutzer seinen Cache löscht), aber es ist eine Option.
1: Richten Sie eine Datenbank ein, in der eine eindeutige Benutzer-ID als Hex-Zeichenfolge gespeichert ist
2: Erstellen Sie eine genUser.php-Datei (oder eine andere Sprache), die eine Benutzer-ID generiert, diese in der Datenbank speichert und dann aus den Werten dieser Hex-Zeichenfolge eine echte Farb-PNG-Datei erstellt (jedes Pixel hat 4 Byte), und geben Sie sie zurück das an den Browser. Stellen Sie sicher, dass Sie den Inhaltstyp und die Cache-Header festlegen.
3: In HTML oder JS erstellen Sie ein Bild wie
<img id='user_id' src='genUser.php' />
4: Zeichnen Sie das Bild auf eine Leinwand
ctx.drawImage(document.getElementById('user_id'), 0, 0);
5: Lesen Sie die Bytes dieses Bildes mit aus
ctx.getImageData
und konvertieren Sie die Ganzzahlen in eine Hex-Zeichenfolge.6: Dies ist Ihre eindeutige Benutzer-ID, die jetzt auf dem Computer Ihres Benutzers zwischengespeichert wird.
quelle
I'm after device recognition
ist das Werbegeschenk für das, was er will, und er arbeitet hier aus: stackoverflow.com/questions/15966812/…Basierend auf dem, was Sie gesagt haben:
Am besten senden Sie die Mac-Adresse, die die NIC-ID ist.
Sie können sich diesen Beitrag ansehen: Wie kann ich den MAC und die IP-Adresse eines verbundenen Clients in PHP abrufen?
quelle
Sie können es mit etags tun. Obwohl ich nicht sicher bin, ob diese rechtliche als eine Reihe von Klagen eingereicht wurden.
Wenn Sie Ihre Benutzer richtig warnen oder eine Intranet-Website haben, ist dies möglicherweise in Ordnung.
quelle
Sie könnten möglicherweise einen Blob erstellen, um eine Gerätekennung zu speichern ...
Der Nachteil ist, dass der Benutzer den Blob herunterladen muss ( Sie können den Download erzwingen ), da der Browser nicht auf das Dateisystem zugreifen kann, um die Datei direkt zu speichern.
Referenz:
https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-22/blobs
quelle
Ineffizient, kann aber zu den gewünschten Ergebnissen führen, wäre es, eine API auf Ihrer Seite abzufragen. Haben Sie einen Hintergrundprozess auf der Clientseite, der in regelmäßigen Abständen Benutzerdaten sendet. Sie benötigen eine Benutzer-ID, um sie an Ihre API zu senden. Sobald Sie dies haben, können Sie alle Informationen senden, die dieser eindeutigen Kennung zugeordnet sind.
Dadurch werden keine Cookies und keine lokale Speicherung mehr benötigt.
quelle
Ich kann nicht glauben, http://browserspy.dk wurde hier noch nicht erwähnt! Die Site beschreibt viele Funktionen (in Bezug auf die Mustererkennung), die zum Erstellen eines Klassifikators verwendet werden können.
Und natürlich würde ich zur Bewertung der Funktionen Support Vector Machines und insbesondere libsvm vorschlagen .
quelle
Verfolgen Sie sie während einer Sitzung oder über Sitzungen hinweg?
Wenn Ihre Site HTTPS Everywhere ist, können Sie die TLS-Sitzungs-ID verwenden, um die Sitzung des Benutzers zu verfolgen
quelle
Dies erfordert, dass der Benutzer die Kennung bereitwillig installiert.
Sobald das Plugin installiert ist, enthält der Fingerabdruck eines beliebigen (Plugin-fähigen) Browsers dieses spezielle Plugin. Um die Informationen an einen Server zurückzugeben, ist ein Algorithmus erforderlich, um das Plugin auf der Clientseite effektiv zu erkennen. Andernfalls benötigen Benutzer von IE und Firefox> = 28 eine Tabelle mit möglichen gültigen Identifikationen.
Dies erfordert eine relativ hohe Investition in eine Technologie, die wahrscheinlich von den Browser-Anbietern heruntergefahren wird. Wenn Sie Ihre Benutzer davon überzeugen können, ein Plugin zu installieren, gibt es möglicherweise auch Optionen wie die Installation eines lokalen Proxys , die Verwendung von VPN oder das Patchen der Netzwerktreiber.
Benutzer, die nicht identifiziert werden möchten (oder ihre Computer), werden immer einen Weg finden, dies zu verhindern.
quelle
this will require the user to willingly install the identifier.
ist wahrscheinlich nicht das, was das Originalplakat (OP) bedeutete.