Je suis en train de créer un outil d'analyse et je peux actuellement obtenir l'adresse IP, le navigateur et le système d'exploitation de l'utilisateur auprès de son agent utilisateur.
Je me demande s'il est possible de détecter le même utilisateur sans utiliser de cookies ou de stockage local? Je ne m'attends pas à des exemples de code ici; juste un simple indice pour savoir où chercher plus loin.
J'ai oublié de mentionner qu'il devrait être compatible avec tous les navigateurs s'il s'agit du même ordinateur / appareil. Fondamentalement, je suis après la reconnaissance de l'appareil, pas vraiment l'utilisateur.
javascript
php
http-headers
fingerprinting
barre oblique197
la source
la source
Réponses:
introduction
Si je vous comprends bien, vous devez identifier un utilisateur pour lequel vous n'avez pas d'identifiant unique, vous voulez donc savoir qui il est en faisant correspondre des données aléatoires. Vous ne pouvez pas stocker l'identité de l'utilisateur de manière fiable car:
Une applet Java ou un objet Com aurait été une solution simple en utilisant un hachage d'informations matérielles, mais de nos jours, les gens sont tellement conscients de la sécurité qu'il serait difficile d'amener les gens à installer ce type de programmes sur leur système. Cela vous laisse coincé avec l'utilisation de cookies et d'autres outils similaires.
Cookies et autres outils similaires
Vous pouvez envisager de créer un profil de données, puis d'utiliser des tests de probabilité pour identifier un utilisateur probable . Un profil utile pour cela peut être généré par une combinaison des éléments suivants:
Les éléments que j'ai énumérés ne sont, bien sûr, que quelques façons possibles d'identifier un utilisateur de manière unique. Il y en a beaucoup plus.
Avec cet ensemble d'éléments de données aléatoires à partir desquels créer un profil de données, quelle est la prochaine étape?
L'étape suivante consiste à développer une logique floue , ou, mieux encore, un réseau neuronal artificiel (qui utilise la logique floue). Dans les deux cas, l'idée est de former votre système, puis de combiner son entraînement avec l'inférence bayésienne pour augmenter la précision de vos résultats.
La bibliothèque NeuralMesh pour PHP vous permet de générer des réseaux de neurones artificiels. Pour implémenter l'inférence bayésienne, consultez les liens suivants:
À ce stade, vous pensez peut-être:
Pourquoi tant de mathématiques et de logique pour une tâche apparemment simple?
Fondamentalement, parce que ce n'est pas une tâche simple . Ce que vous essayez d'atteindre, c'est en fait la pure probabilité . Par exemple, compte tenu des utilisateurs connus suivants:
Lorsque vous recevez les données suivantes:
La question que vous vous posez essentiellement est:
Quelle est la probabilité que les données reçues (B + C + E + G + F + K) soient réellement User1 ou User2? Et laquelle de ces deux correspondances est la plus probable?
Afin de répondre efficacement à cette question, vous devez comprendre le format Fréquence vs Probabilité et pourquoi la probabilité conjointe pourrait être une meilleure approche. Les détails sont trop difficiles à entrer ici (c'est pourquoi je vous donne des liens), mais un bon exemple serait une application d'assistant de diagnostic médical , qui utilise une combinaison de symptômes pour identifier les maladies possibles.
Pensez un instant à la série de points de données qui composent votre profil de données (B + C + E + G + F + K dans l'exemple ci-dessus) en tant que symptômes et Utilisateurs inconnus en tant que maladies . En identifiant la maladie, vous pouvez en outre identifier un traitement approprié (traiter cet utilisateur comme Utilisateur1).
De toute évidence, une maladie pour laquelle nous avons identifié plus d'un symptôme est plus facile à identifier. En fait, plus nous pouvons identifier de symptômes , plus notre diagnostic est presque certain et précis.
Y a-t-il d'autres alternatives?
Bien sûr. Comme mesure alternative, vous pouvez créer votre propre algorithme de notation simple et le baser sur des correspondances exactes. Ce n'est pas aussi efficace que la probabilité, mais peut être plus simple à mettre en œuvre.
À titre d'exemple, considérons ce graphique de score simple:
Pour chaque information que vous pouvez collecter sur une demande donnée, attribuez le score associé, puis utilisez Importance pour résoudre les conflits lorsque les scores sont identiques.
Preuve de concept
Pour une simple preuve de concept, jetez un œil à Perceptron . Perceptron est un modèle d'ARN qui est généralement utilisé dans les applications de reconnaissance de formes. Il existe même une ancienne classe PHP qui l'implémente parfaitement, mais vous devrez probablement la modifier pour vos besoins.
Bien qu'il s'agisse d'un excellent outil, Perceptron peut toujours renvoyer plusieurs résultats (correspondances possibles), il est donc toujours utile d'utiliser une comparaison de score et de différence pour identifier le meilleur de ces correspondances.
Hypothèses
Attente
Code de preuve de concept
Production:
Print_r de "D":
Si Debug = true, vous pourrez voir l' entrée (capteur et souhaité), les poids initiaux, la sortie (capteur, somme, réseau), l'erreur, la correction et les poids finaux .
x1 à x20 représentent les caractéristiques converties par le code.
Voici une démo en ligne
Classe utilisée:
Classe Perceptron modifiée
Conclusion
Identifier un utilisateur sans identifiant unique n'est pas une tâche simple ou directe. il dépend de la collecte d'une quantité suffisante de données aléatoires que vous pouvez collecter auprès de l'utilisateur par diverses méthodes.
Même si vous choisissez de ne pas utiliser de réseau neuronal artificiel, je suggère au moins d'utiliser une matrice de probabilité simple avec des priorités et des probabilités - et j'espère que le code et les exemples fournis ci-dessus vous en donneront assez pour continuer.
la source
Implement Bayesian inference using PHP
, les 3 parties. -Frequency vs Probability
-Joint Probability
-Input (Sensor & Desired), Initial Weights, Output (Sensor, Sum, Network), Error, Correction and Final Weights
Cette technique (pour détecter les mêmes utilisateurs sans cookies - ou même sans adresse IP) s'appelle l' empreinte du navigateur . En gros, vous explorez autant d'informations que vous le pouvez sur le navigateur - de meilleurs résultats peuvent être obtenus avec javascript, flash ou java (par exemple, les extensions installées, les polices, etc.). Après cela, vous pouvez stocker les résultats hachés, si vous le souhaitez.
Ce n'est pas infaillible, mais:
Plus d'informations:
la source
L'impression de pouce mentionnée ci-dessus fonctionne, mais peut encore souffrir de colisions.
Une façon consiste à ajouter l'UID à l'url de chaque interaction avec l'utilisateur.
http://someplace.com/12899823/user/profile
Où chaque lien du site est adapté avec ce modificateur. Il est similaire à la façon dont ASP.Net fonctionnait en utilisant les données FORM entre les pages.
la source
Avez-vous examiné Evercookie ? Cela peut ou non fonctionner sur tous les navigateurs. Un extrait de leur site.
"Si un utilisateur obtient le cookie sur un navigateur et passe à un autre navigateur, tant qu'il a toujours le cookie Local Shared Object, le cookie se reproduira dans les deux navigateurs."
la source
Vous pouvez le faire avec un png mis en cache, ce serait peu fiable (différents navigateurs se comportent différemment, et cela échouera si l'utilisateur efface son cache), mais c'est une option.
1: configurer une base de données qui stocke un identifiant d'utilisateur unique sous forme de chaîne hexadécimale
2: créez un fichier genUser.php (ou n'importe quelle langue) qui génère un identifiant d'utilisateur, le stocke dans la base de données puis crée une vraie couleur .png à partir des valeurs de cette chaîne hexadécimale (chaque pixel sera de 4 octets) et retourne cela au navigateur. Assurez-vous de définir le type de contenu et les en-têtes de cache.
3: dans le HTML ou JS créez une image comme
<img id='user_id' src='genUser.php' />
4: dessinez cette image sur une toile
ctx.drawImage(document.getElementById('user_id'), 0, 0);
5: lire les octets de cette image en utilisant
ctx.getImageData
, et convertissez les entiers en une chaîne hexadécimale.6: C'est votre identifiant d'utilisateur unique qui est maintenant mis en cache sur l'ordinateur de vos utilisateurs.
la source
I'm after device recognition
est le cadeau pour ce qu'il veut, et il élabore ici: stackoverflow.com/questions/15966812/…D'après ce que vous avez dit:
La meilleure façon de le faire est d'envoyer l'adresse mac qui est l'ID NIC.
Vous pouvez jeter un œil à cet article: Comment puis-je obtenir le MAC et l'adresse IP d'un client connecté en PHP?
la source
Vous pouvez le faire avec etags. Bien que je ne sois pas sûr si cela juridique comme un tas de poursuites ont été intentées.
Si vous prévenez correctement vos utilisateurs ou si vous avez quelque chose comme un site Web intranet, cela peut être bon.
la source
Vous pourriez potentiellement créer un objet blob pour stocker un identifiant d'appareil ...
l'inconvénient est que l'utilisateur doit télécharger le blob ( vous pouvez forcer le téléchargement ), car le navigateur ne peut pas accéder au système de fichiers pour enregistrer directement le fichier.
référence:
https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-22/blobs
la source
Inefficace, mais peut vous donner les résultats escomptés, serait d'interroger une API de votre côté. Avoir un processus d'arrière-plan côté client qui envoie les données utilisateur à un intervalle. Vous aurez besoin d'un identifiant utilisateur à envoyer à votre API. Une fois que vous avez cela, vous pouvez envoyer toutes les informations associées à cet identifiant unique.
Cela supprime le besoin de cookies et de stockage local.
la source
Je ne peux pas croire, http://browserspy.dk n'a toujours pas été mentionné ici! Le site décrit de nombreuses fonctionnalités (en termes de reconnaissance de formes), qui pourraient être utilisées pour construire un classificateur.
Et bien sûr , pour évaluer les fonctionnalités, je suggérerais Support Vector Machines et libsvm en particulier.
la source
Les suivre pendant une session ou entre les sessions?
Si votre site est HTTPS Everywhere, vous pouvez utiliser l'ID de session TLS pour suivre la session de l'utilisateur
la source
cela obligera l'utilisateur à installer volontairement l'identifiant.
une fois le plugin installé, l' empreinte digitale de n'importe quel navigateur (plugin activé) contiendra ce plugin spécifique. Pour renvoyer les informations à un serveur, un algorithme pour détecter efficacement le plugin côté client est nécessaire, sinon IE et Firefox> = 28 utilisateurs auront besoin d'un tableau des identifiants valides possibles.
Cela nécessite un investissement relativement élevé dans une technologie qui sera probablement fermée par les fournisseurs de navigateurs. Lorsque vous êtes en mesure de convaincre vos utilisateurs d'installer un plugin, il peut également y avoir des options comme installer un proxy local , utiliser vpn ou patcher les pilotes réseau.
Les utilisateurs qui ne souhaitent pas être identifiés (ou leurs machines) trouveront toujours un moyen de l'empêcher.
la source
this will require the user to willingly install the identifier.
n'est probablement pas ce que signifiait l'affiche originale (OP).