Comment identifier de manière unique les ordinateurs qui visitent mon site Web?

184

J'ai besoin de trouver un moyen d'identifier de manière unique chaque ordinateur qui visite le site Web que je crée. Quelqu'un a-t-il des conseils sur la façon d'y parvenir?

Parce que je veux que la solution fonctionne sur toutes les machines et tous les navigateurs (dans des limites raisonnables), j'essaie de créer une solution en utilisant javascript.

Les cookies ne feront pas l'affaire.

J'ai besoin de la capacité de créer fondamentalement un GUID qui est unique à un ordinateur et reproductible, en supposant qu'aucune modification matérielle ne soit survenue sur l'ordinateur. Les directions auxquelles je pense sont d'obtenir le MAC de la carte réseau et d'autres informations de cette nature qui identifieront la machine visitant le site Web.

qui est invalide
la source
4
Vous ne pouvez pas obtenir le mac de leur carte réseau - IP ne contient pas ces informations, le mieux que vous puissiez obtenir est l'adresse IP de leur passerelle FAI. Pour certains FAI, cela pourrait être le même pour tous les utilisateurs d'une ville donnée.
Martin Beckett
1
Le fait que vous ne voulez pas que l'utilisateur puisse l'usurper. La réponse est bien sûr que cela ne peut pas être fait sans certains de vos composants privilégiés installés sur la machine des utilisateurs.
AnthonyWJones
Les adresses MAC sont très faciles à usurper. Ma petite connexion sans fil minable passera par votre MAC, remplacera la sienne ou utilisera celle que vous spécifiez.
Kent Brewster
Cela ne peut pas être fait - les cookies sont votre meilleur pari
Draemon
Veuillez lire ma réponse sur cette page. j'ai une très bonne idée pour ce problème :)
Mahdi Jazini

Réponses:

58

Ces personnes ont développé une méthode d'empreinte digitale pour reconnaître un utilisateur avec un haut niveau de précision:

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

Nous étudions dans quelle mesure les navigateurs Web modernes sont soumis à «l'empreinte digitale de l'appareil» via les informations de version et de configuration qu'ils transmettront aux sites Web sur demande. Nous avons implémenté un algorithme de prise d'empreintes digitales possible, et collecté ces empreintes digitales à partir d'un large échantillon de navigateurs qui ont visité notre côté test, panopticlick.eff.org. Nous observons que la distribution de notre empreinte digitale contient au moins 18,1 bits d'entropie, ce qui signifie que si nous choisissons un navigateur au hasard, nous nous attendons au mieux à ce que seul un autre navigateur sur 286 777 partagera son empreinte digitale. Parmi les navigateurs prenant en charge Flash ou Java, la situation est pire, le navigateur moyen transportant au moins 18,8 bits d'informations d'identification. 94,2% des navigateurs avec Flash ou Java étaient uniques dans notre échantillon.

En observant les visiteurs qui reviennent, nous estimons à quelle vitesse les empreintes digitales du navigateur peuvent changer au fil du temps. Dans notre échantillon, les empreintes digitales ont changé assez rapidement, mais même une simple heuristique était généralement capable de deviner quand une empreinte digitale était une version «améliorée» de l'empreinte digitale d'un navigateur précédemment observé, avec 99,1% des suppositions correctes et un taux de faux positifs de seulement 0,86% .

Nous discutons de ce que les empreintes digitales des navigateurs représentent une menace pour la vie privée dans la pratique, et des contre-mesures appropriées pour l'empêcher. Il existe un compromis entre la protection contre l'empreinte digitale et certains types de débogage, qui, dans les navigateurs actuels, est fortement contre la confidentialité. Paradoxalement, les technologies de confidentialité anti-empreintes digitales peuvent être autodestructrices si elles ne sont pas utilisées par un nombre suffisant de personnes; nous montrons que certaines mesures de protection de la vie privée sont actuellement victimes de ce paradoxe, mais d'autres non ...

Jonathan
la source
14
Je suis développeur, je suis venu ici pour chercher une solution rapide ou un petit extrait de code. Ce document ne montre pas comment l'implémenter. Je veux savoir comment mettre en œuvre cela afin de pouvoir suivre les utilisateurs uniques de mon site.
Oliver
10
@Oliver Vous avez raison. Cela ne vous donne pas la réponse sur une assiette. Cela nécessite une lecture plus approfondie, une compréhension de tous les problèmes impliqués et pourquoi un simple extrait de code ne fonctionnera probablement jamais complètement. Un développeur entreprenant peut écrire une bibliothèque qui fait tout le travail acharné et permettre aux personnes à la recherche d'une «solution rapide» d'en bénéficier à l'avenir.
Jonathan
2
La réponse est également un lien uniquement. Un résumé des techniques décrites dans le PDF serait apprécié au cas où le PDF deviendrait indisponible.
Damian Yerrick
2
Voir ma réponse ici pour un package open source et un moyen simple d'implémenter l'empreinte digitale stackoverflow.com/a/47536192/3650835
KayakinKoder
Je ferais donc mieux de faire un "cookie" résilient avec un grand nombre aléatoire: D
Luis Mauricio
49

introduction

Je ne sais pas s'il existe ou s'il y aura un moyen d'identifier de manière unique les machines en utilisant uniquement un navigateur. Les principales raisons sont:

  • Vous devrez enregistrer les données sur l'ordinateur des utilisateurs. Ces données peuvent être supprimées par l'utilisateur à tout moment. Sauf si vous avez un moyen de recréer ces données qui sont uniques pour chaque machine, vous êtes bloqué.
  • Validation. Vous devez vous protéger contre l'usurpation d'identité, le piratage de session, etc.

Même s'il existe des moyens de suivre un ordinateur sans utiliser de cookies, il y aura toujours un moyen de le contourner et un logiciel qui le fera automatiquement. Si vous avez vraiment besoin de suivre quelque chose basé sur un ordinateur, vous devrez écrire une application native (Apple Store / Android Store / Windows Program / etc.).

Je ne serai peut-être pas en mesure de vous donner une réponse à la question que vous avez posée, mais je peux vous montrer comment mettre en œuvre le suivi de session. Avec le suivi de session, vous essayez de suivre la session de navigation au lieu de l'ordinateur visitant votre site. En suivant la session, votre schéma de base de données ressemblera à ceci:

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
  }, ...]

Avantages du suivi basé sur la session:

  1. Pour les utilisateurs connectés, vous pouvez toujours générer le même identifiant de session à partir des utilisateurs username/ password/ email.
  2. Vous pouvez toujours suivre les utilisateurs invités en utilisant sessionID.
  3. Même si plusieurs personnes utilisent le même ordinateur (c.-à-d. Cybercafé), vous pouvez les suivre séparément si elles se connectent.

Inconvénients du suivi basé sur la session:

  1. Les sessions sont basées sur un navigateur et non sur un ordinateur. Si un utilisateur utilise 2 navigateurs différents, il en résultera 2 sessions différentes. Si cela pose un problème, vous pouvez arrêter de lire ici.
  2. Les sessions expirent si l'utilisateur n'est pas connecté. Si un utilisateur n'est pas connecté, il utilisera une session d'invité qui sera invalidée si l'utilisateur supprime les cookies et le cache du navigateur.

la mise en oeuvre

Il existe de nombreuses façons de l'implémenter. Je ne pense pas pouvoir les couvrir tous, je vais simplement énumérer mes préférés, ce qui en ferait une réponse avisée . Gardez cela à l'esprit.

Basiques

Je vais suivre la session en utilisant ce que l'on appelle un cookie permanent. Il s'agit de données qui se recréeront automatiquement même si l'utilisateur supprime ses cookies ou met à jour son navigateur. Il ne survivra cependant pas à la suppression de ses cookies et de son cache de navigation par l'utilisateur.

Pour mettre en œuvre cela, j'utiliserai le mécanisme de mise en cache des navigateurs ( RFC ), l'API WebStorage ( MDN ) et les cookies de navigateur ( RFC , Google Analytics ).

Légal

Afin d'utiliser les identifiants de suivi, vous devez les ajouter à la fois à votre politique de confidentialité et à vos conditions d'utilisation, de préférence sous le sous-titre Suivi . Nous utiliserons les touches suivantes à la fois sur document.cookieet window.localStorage:

  • _ga : données Google Analytics
  • __utma : cookie de suivi Google Analytics
  • sid : SessionID

Assurez-vous d'inclure des liens vers votre politique de confidentialité et vos conditions d'utilisation sur toutes les pages qui utilisent le suivi.

Où stocker mes données de session?

Vous pouvez stocker vos données de session dans la base de données de votre site Web ou sur l'ordinateur des utilisateurs. Étant donné que je travaille normalement sur des sites plus petits (plus de 10 000 connexions continues) qui utilisent des applications tierces (Google Analytics / Clicky / etc.), il est préférable pour moi de stocker des données sur l'ordinateur des clients. Cela présente les avantages suivants:

  1. Aucune recherche de base de données / surcharge / charge / latence / espace / etc.
  2. L'utilisateur peut supprimer ses données quand il le souhaite sans avoir à m'écrire des e-mails ennuyeux.

et inconvénients:

  1. Les données doivent être cryptées / décryptées et signées / vérifiées, ce qui crée une surcharge du processeur sur le client (pas si mal) et le serveur (bah!).
  2. Les données sont supprimées lorsque l'utilisateur supprime ses cookies et son cache. (c'est ce que je veux vraiment)
  3. Les données ne sont pas disponibles pour l'analyse lorsque les utilisateurs se déconnectent. (analyses pour les utilisateurs actuellement en train de naviguer uniquement)

UUIDS

  • BrowserID : identifiant unique généré à partir de la chaîne de l'agent utilisateur du navigateur.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : généré à partir de l'adresse IP et de la clé de session HTTPS des utilisateurs. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : empreinte digitale basée sur JavaScript basée sur un fingerprint.js modifié .FingerPrint.get()
  • SessionID : clé aléatoire générée lors de la première visite du site par l'utilisateur.BrowserID|ComputerID|randombytes(256)
  • GoogleID : généré à partir d'un __utmacookie.getCookie(__utma).uniqueid

Mécanisme

L'autre jour, je regardais l'émission de wendy williams avec ma petite amie et j'ai été complètement horrifié lorsque l'animatrice a conseillé à ses téléspectateurs de supprimer l'historique de leur navigateur au moins une fois par mois. La suppression de l'historique du navigateur a normalement les effets suivants:

  1. Supprime l'historique des sites Web visités.
  2. Supprime les cookies et window.localStorage(aww man).

La plupart des navigateurs modernes rendent cette option facilement disponible, mais ne craignez pas vos amis. Car il y a une solution. Le navigateur dispose d'un mécanisme de mise en cache pour stocker des scripts / images et d'autres choses. Habituellement, même si nous supprimons notre historique, ce cache de navigateur reste toujours. Tout ce dont nous avons besoin, c'est d'un moyen de stocker nos données ici. Il existe 2 méthodes pour ce faire. Le mieux est d'utiliser une image SVG et de stocker nos données dans ses balises. De cette façon, les données peuvent toujours être extraites même si JavaScript est désactivé à l'aide de Flash. Cependant, comme c'est un peu compliqué, je vais démontrer l'autre approche qui utilise JSONP ( Wikipedia )

example.com/assets/js/tracking.js (en fait 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);
}

Maintenant, nous pouvons obtenir notre clé de session à tout moment:

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

Comment puis-je faire en sorte que tracking.js reste dans le navigateur?

Nous pouvons y parvenir en utilisant les en - têtes HTTP Cache-Control , Last-Modified et ETag . Nous pouvons utiliser SessionIDcomme valeur pour l'en-tête etag:

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

Last-Modifiedl'en-tête indique au navigateur que ce fichier n'est pratiquement jamais modifié. Cache-Controldit aux mandataires et aux passerelles de ne pas mettre en cache le document mais au navigateur de le mettre en cache pendant 1 an.

La prochaine fois que le navigateur demandera le document, il enverra des en If-Modified-Since- If-None-Matchtêtes. Nous pouvons les utiliser pour renvoyer une 304 Not Modifiedréponse.

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();
}

Désormais, chaque fois que le navigateur demande, tracking.jsnotre serveur répondra avec un 304 Not Modifiedrésultat et forcera l'exécution de la copie locale de tracking.js.

Je ne comprends toujours pas. Explique le moi

Supposons que l'utilisateur efface son historique de navigation et actualise la page. La seule chose qui reste sur l'ordinateur des utilisateurs est une copie du tracking.jscache du navigateur. Lorsque le navigateur le demande, tracking.jsil reçoit une 304 Not Modifiedréponse qui l'amène à exécuter la 1ère version de tracking.jscelui - ci reçue. tracking.jsexécute et restaure le SessionIDqui a été supprimé.

Validation

Supposons que Haxor X vole les cookies de nos clients alors qu'ils sont encore connectés. Comment les protégeons-nous? Cryptographie et empreinte digitale du navigateur à la rescousse. Rappelez-vous que notre définition originale SessionIDétait:

BrowserID|ComputerID|randomBytes(256)

Nous pouvons changer cela en:

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

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

Nous pouvons maintenant valider notre en SessionIDutilisant l'algorithme suivant:

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; 

Maintenant, pour que l'attaque de Haxor fonctionne, ils doivent:

  1. Avoir la même chose ComputerID. Cela signifie qu'ils doivent avoir le même fournisseur de FAI que la victime (Tricky). Cela donnera à notre victime la possibilité d'intenter une action en justice dans son propre pays. Haxor doit également obtenir la clé de session HTTPS de la victime (Hard).
  2. Avoir la même chose BrowserID. N'importe qui peut usurper la chaîne User-Agent (ennuyeux).
  3. Être capable de créer leur propre faux SessionID(très difficile). Les attaques de volume ne fonctionneront pas car nous utilisons un horodatage pour générer une clé de cryptage / signature, donc fondamentalement, c'est comme générer une nouvelle clé pour chaque session. En plus de cela, nous chiffrons des octets aléatoires, donc une simple attaque par dictionnaire est également hors de question.

Nous pouvons améliorer la validation en transférant GoogleIDet FingerprintID(via ajax ou des champs cachés) et en les comparant à ceux-ci.

if( GoogleID != getStoredGoodleID($sid) ) return false;
if( byte_difference(FingerPrintID, getStoredFingerprint($sid) > 10%) return false;
Walter
la source
1
c'est une belle réponse d'ailleurs. Tellement d'informations. Je suis surpris que vous n'ayez pas plus de votes positifs. Honnêtement, je ne peux pas croire que la technique avec svgs et jsonp existe, mais elle le doit. N'existe-t-il pas de bibliothèque qui utilise une telle technique lorsque les cookies / localStorage / sessionStorage sont désactivés?
faceyspacey.com
Aussi, je me demande s'il existe une version avancée de ceci pour simplement utiliser votre fichier tracking.js mis en cache (ou plusieurs fichiers de ce type) pour l'utiliser comme essentiellement localStorage / cookies, c'est-à-dire pour mémoriser beaucoup de données. L'idée serait pour une bibliothèque d'avoir des méthodes comme storageFacade.setItemet 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` de tous les diffs créés pendant la session qui sont automatiquement créés de temps en temps.
faceyspacey.com
Si le manifeste n'était créé que de temps en temps, cela limiterait essentiellement le nombre de manifestes créés. Et plus tard, en javascript, vous pouvez essayer de demander tous les manifestes possibles créés, puis utiliser le dernier pour reconstruire l'état à partir des instantanés de diff. Si nous avions juste des diffs, il pourrait y en avoir des centaines ou des milliers et cela pourrait être un problème de performance d'essayer de les récupérer tous jusqu'à ce qu'un échoue. C'est-à-dire que vous récupérez le diff ou le manifeste de manière incrémentielle: manifest-1.js, manifest-2.js, etc., jusqu'à ce qu'il échoue (car il n'existe pas). Ce qui signifie que vous avez tous les manifestes (ou diffs)
faceyspacey.com
@ faceyspacey.com Désolé, aucune bibliothèque jamais. Vous devez coder et mettre à jour constamment votre propre solution personnalisée. Pensez-y. Dès que vous développez une bibliothèque pour cela, tous les bloqueurs d'ajout / navigateurs / etc la contreraient immédiatement. La seule raison pour laquelle cela fonctionne est parce qu'il repose sur une fonctionnalité de base très importante du navigateur qu'ils ne supprimeront / désactiveront tout simplement pas: CACHING. Je continue de perdre mes identifiants et mots de passe. Et comme je ne pose plus beaucoup de questions, je n'ai plus besoin d'y répondre pour pouvoir laisser des primes avec réputation. Je viens de voir cela et j'ai réalisé qu'il n'y avait pas de vraie réponse.
Walter
30

Il n'est pas possible d'identifier les ordinateurs accédant à un site Web sans la coopération de leurs propriétaires. S'ils vous le permettent, cependant, vous pouvez stocker un cookie pour identifier la machine lorsqu'elle visite à nouveau votre site. La clé est que le visiteur a le contrôle; ils peuvent supprimer le cookie et apparaître en tant que nouveau visiteur à tout moment.

Erickson
la source
7
S'il visite votre site avec 3 navigateurs différents, il aura 3 cookies différents car les cookies ne sont pas partagés entre les applications. De plus, s'il utilise DHCP plutôt qu'une adresse IP statique, il n'aura probablement pas la même adresse IP pour son ordinateur pendant longtemps.
JohnnySoftware
2
Oui et non. L'empreinte digitale du navigateur identifie un profil de navigateur avec un degré de probabilité élevé, mais ce n'est pas l'identification un-à-un absolue recherchée dans cette question. Il est également assez simple (mais peut-être pas facile ) pour un utilisateur averti de contourner délibérément s'il le souhaite.
erickson
30

Une possibilité consiste à utiliser des cookies flash :

  • Disponibilité omniprésente (95% des visiteurs auront probablement flash)
  • Vous pouvez stocker plus de données par cookie (jusqu'à 100 Ko)
  • Partagé entre les navigateurs, donc plus susceptible d'identifier de manière unique une machine
  • La suppression des cookies du navigateur ne supprime pas les cookies flash.

Vous devrez créer une petite animation flash (cachée) pour les lire et les écrire.

Quel que soit l'itinéraire que vous choisissez, assurez-vous que vos utilisateurs choisissent d'être suivis, sinon vous envahissez leur vie privée et devenez l'un des méchants.

Joeri Sebrechts
la source
5
De nombreux utilisateurs utilisent Flashblock. Flash sera activé par l'utilisateur avec un clic s'il veut le voir.
Horcrux7
3
Il existe des méthodes pour supprimer les cookies, mais elles dépassent l'utilisateur moyen. Il existe des pages sur le site Web d'Adobe pour afficher et supprimer les LSO (Local Shared Object en.wikipedia.org/wiki/Local_Shared_Object ) bien que pour les utilisateurs de Firefox, le module complémentaire Objection soit la méthode la plus simple pour les supprimer
Sam Hasler
Je pense que c'est l'une des meilleures solutions. Youtube, Google, etc. utilisent les LSO pour lutter contre les abus.
Uku Loskit
4
Les cookies Flash sont aussi facilement supprimés que les cookies HTTP dans les versions modernes de Firefox et Chrome: Wikipédia :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
La situation a changé au cours des neuf dernières années. De nos jours, 95% des utilisateurs ne sont même pas sur un ordinateur de bureau et le mobile n'a jamais vraiment adopté Adobe Flash Player.
Damian Yerrick
21

Vous pouvez essayer de définir un identifiant unique dans un evercookie (cela fonctionnera sur plusieurs navigateurs, consultez leur FAQ): http://samy.pl/evercookie/

Il existe également une société appelée ThreatMetrix qui est utilisée par de nombreuses grandes entreprises pour résoudre ce problème: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Ils sont assez chers et certains leurs autres produits ne sont pas très bons, mais leur identifiant d'appareil fonctionne bien.

Enfin, il y a cette implémentation open source jquery de l'idée panopticlick: https://github.com/carlo/jquery-browser-fingerprint Cela semble assez à moitié cuit en ce moment mais pourrait être développé.

J'espère que ça aide!

Brian Armstrong
la source
+ 1 - Brian - Excellente information! Tout cela s'est avéré très utile. Je vous remercie. Ajoutez plus d'informations si vous n'avez plus appris depuis.
Ben O
1
Concernant evercookie. Essayé avec Opera. Définir les cookies, puis supprimé tout l'historique d'Opera, puis fermé Opera, ouvert à nouveau cliqué Click to rediscover cookieset voir soit null ou non défini. Donc ça ne marche pas pour moi
Andris
J'ai essayé l'exemple de page avec le mode privé iOS Safari et la navigation privée Chrome de bureau, le cookie ne peut pas être récupéré après le redémarrage du navigateur.
Morio
20

Il existe une méthode populaire appelée empreinte digitale sur toile, décrite dans cet article scientifique: Le Web n'oublie jamais: mécanismes de suivi persistants dans la nature . Une fois que vous commencez à le chercher, vous serez surpris de la fréquence à laquelle il est utilisé. La méthode crée une empreinte digitale unique, cohérente pour chaque combinaison navigateur / matériel.

L'article passe également en revue d'autres méthodes de suivi persistantes, comme les cookies evercookies, la réapparition des cookies http et Flash et la synchronisation des cookies.

Plus d'informations sur l'empreinte digitale sur toile ici:

Par Aronsson Quested
la source
1
donc si deux appareils sont identiques (mêmes ordinateurs batch, même OS, mêmes navigateurs), les empreintes digitales sont les mêmes, non?
xiaoyu2er
La vraie question ici est de savoir quelle bibliothèque javascript je peux insérer dans mon code pour l'utiliser. Lire une tonne de théorie ne résout pas les problèmes qui doivent être résolus dans les 60 prochaines minutes.
Thanasis Ioannidis
11

Il n'y a qu'une petite quantité d'informations que vous pouvez obtenir via une connexion HTTP.

  1. IP - Mais comme d'autres l'ont dit, ce n'est pas réglé pour beaucoup, sinon la plupart des utilisateurs d'Internet en raison des politiques d'allocation dynamique de leur FAI.

  2. Useragent String - Presque tous les navigateurs envoient quel type de navigateur ils sont à chaque demande. Cependant, cela peut être défini par l'utilisateur dans de nombreux navigateurs aujourd'hui.

  3. Collection de champs de demande - Il y a d'autres champs envoyés avec chaque demande, tels que les encodages pris en charge, etc. Ceux-ci, s'ils sont utilisés dans l'agrégat, peuvent aider à identifier la machine d'un utilisateur, mais encore une fois, ils dépendent du navigateur et peuvent être modifiés.

  4. Cookies - La création d'un cookie est une autre façon d'identifier une machine, ou plus spécifiquement un navigateur sur une machine, mais comme d'autres l'ont dit, ceux-ci peuvent être supprimés ou désactivés par les utilisateurs, et ne sont applicables que sur un navigateur, pas un machine.

Donc, la bonne réponse est que vous ne pouvez pas réaliser ce que vous vivriez uniquement via les protocoles HTTP sur IP. Cependant, en utilisant une combinaison de cookies, ainsi que d'IP et des champs de la requête HTTP, vous avez de bonnes chances de deviner, en quelque sorte, de quelle machine il s'agit. Les utilisateurs ont tendance à n'utiliser qu'un seul navigateur, et souvent à partir d'une seule machine, donc cela peut être assez fiable, mais cela variera en fonction du public ... les techniciens sont plus susceptibles de jouer avec ce genre de choses et d'utiliser plus de machines / navigateurs. De plus, cela pourrait même être associé à une tentative de géolocalisation de l'adresse IP et d'utiliser également ces données. Mais dans tous les cas, il n'y a pas de solution qui sera correcte tout le temps.

cdeszaq
la source
10

Il y a des failles dans les approches avec et sans cookies. Mais si vous pouvez pardonner les lacunes de l'approche des cookies, voici une idée.

Si vous utilisez déjà Google Analytics sur votre site, vous n'avez pas besoin d'écrire de code pour suivre vous-même les utilisateurs uniques. Google Analytics le fait pour vous via la __utmavaleur du cookie, comme décrit dans la documentation de Google . Et en réutilisant cette valeur, vous ne créez pas de charge utile de cookies supplémentaire, ce qui présente des avantages en termes d'efficacité avec les demandes de page.

Et vous pouvez écrire du code assez facilement pour accéder à cette valeur, ou utiliser la getUniqueId() fonction de ce script .

Steve Wortham
la source
Vais-je obtenir le même identifiant en utilisant getUniqueId()différents navigateurs sur la même machine?
Ankur Akvaliya
8

Comme pour les solutions précédentes, les cookies sont une bonne méthode, sachez cependant qu'ils identifient les navigateurs . Si je visitais un site Web dans Firefox, puis dans Internet Explorer, les cookies seraient stockés séparément pour les deux tentatives. Certains utilisateurs désactivent également les cookies (mais plus de personnes désactivent JavaScript).

Une autre méthode à considérer serait l'identification de l'adresse IP et du nom d'hôte (sachez que ceux-ci peuvent varier pour les utilisateurs IP commutés / non statiques, AOL utilise également des adresses IP générales). Cependant, comme cela n'identifie que les réseaux, cela peut ne pas fonctionner aussi bien que les cookies.

Ross
la source
Bon point avec l'adresse IP identifiant le point d'accès au réseau - avec NAT, il pourrait y avoir des pays entiers cachés derrière une seule adresse IP et vous ne seriez pas plus sage. Avec la pénurie d'adresses IPv4, vous verrez toujours de très grandes entreprises ou écoles / universités partager une seule adresse IP pour son trafic Internet sortant.
Piskvor a quitté le bâtiment
6

Outre les suggestions d'utilisation des cookies, le seul ensemble complet d'attributs d'identification disponibles à interroger est contenu dans l'en-tête de la requête HTTP. Il est donc possible d'en utiliser un sous-ensemble pour créer un pseudo-identifiant unique pour un agent utilisateur (c'est-à-dire un navigateur). En outre, la plupart de ces informations sont peut-être déjà enregistrées dans le soi-disant "journal d'accès" de votre logiciel de serveur Web par défaut et, si ce n'est pas le cas, peuvent être facilement configurées pour le faire. Ensuite, un utilitaire pourrait être développé qui scanne simplement le contenu de ce journal, créant des empreintes digitalesde chaque demande comprenant, par exemple, l'adresse IP et la chaîne de l'agent utilisateur, etc. Plus il y a de données disponibles, y compris même le contenu de cookies spécifiques, ajoute à la qualité de l'unicité de cette empreinte digitale. Bien que, comme beaucoup d'autres l'ont déjà dit, le protocole HTTP ne rend pas cela à 100% infaillible - au mieux, il ne peut être qu'un assez bon indicateur.

Danny Whitt
la source
6

Lorsque j'utilise une machine qui n'a jamais visité mon site Web de banque en ligne, on me demande une authentification supplémentaire. Ensuite, si je retourne une deuxième fois sur le site de banque en ligne, l'authentification supplémentaire ne me demande pas ... j'ai supprimé tous les cookies dans IE et je me suis reconnecté sur mon site de banque en ligne en m'attendant à ce que les questions d'authentification soient à nouveau posées. à ma grande surprise, on ne m'a pas demandé. Cela ne laisse-t-il pas croire que la banque fait une sorte de marquage de PC qui n'implique pas de cookies?

Il s'agit d'un type d'authentification assez courant utilisé par les banques.

Supposons que vous accédez au site Web de votre banque via example-isp.com. La première fois que vous y êtes, votre mot de passe vous sera demandé, ainsi qu'une authentification supplémentaire. Une fois que vous avez réussi, la banque sait que l'utilisateur "thatisvaliant" est authentifié pour accéder au site via example-isp.com.

À l'avenir, il ne vous demandera pas d'authentification supplémentaire (au-delà de votre mot de passe) lorsque vous accédez au site via example-isp.com. Si vous essayez d'accéder à la banque via another-isp.com, la banque effectuera à nouveau la même procédure.

Donc, pour résumer, l'identification de la banque est votre FAI et / ou votre netblock, en fonction de votre adresse IP. Évidemment, tous les utilisateurs de votre FAI ne sont pas vous, c'est pourquoi la banque vous demande toujours votre mot de passe.

Avez-vous déjà reçu un appel d'une société émettrice de cartes de crédit pour vérifier que tout va bien lorsque vous utilisez une carte de crédit dans un autre pays? Même concept.

Anirvan
la source
4

Vraiment, ce que vous voulez faire ne peut pas être fait parce que les protocoles ne le permettent pas. Si les adresses IP statiques étaient universellement utilisées, vous pourrez peut-être le faire. Ils ne le sont pas, donc vous ne pouvez pas.

Si vous voulez vraiment identifier des personnes , demandez -leur de se connecter.

Puisqu'ils seront probablement déplacés vers différentes pages de votre site Web, vous avez besoin d'un moyen de les suivre à mesure qu'ils se déplacent.

Tant qu'ils sont connectés et que vous suivez leur session sur votre site via des cookies / paramètres de lien / balises / quoi que ce soit, vous pouvez être à peu près sûr qu'ils utilisent le même ordinateur pendant ce temps.

En fin de compte, il est incorrect de dire que cela vous indique quel ordinateur ils utilisent si vos utilisateurs n'utilisent pas votre propre réseau local et n'ont pas d'adresses IP statiques.

Si ce que vous voulez faire est fait avec la coopération des utilisateurs et qu'il n'y a qu'un seul utilisateur par cookie et qu'ils utilisent un seul navigateur Web, utilisez simplement un cookie.

JohnnySoftware
la source
3

Les cookies ne seront pas utiles pour déterminer les visiteurs uniques. Un utilisateur peut effacer les cookies et actualiser le site - il est alors à nouveau classé comme un nouvel utilisateur.

Je pense que la meilleure façon de procéder est de mettre en œuvre une solution côté serveur (car vous aurez besoin d'un endroit pour stocker vos données). En fonction de la complexité de vos besoins pour ces données, vous devrez déterminer ce qui est considéré comme une visite unique. Une méthode judicieuse serait de permettre à une adresse IP de revenir le jour suivant et de bénéficier d'une visite unique. Plusieurs visites d'une même adresse IP en une journée ne doivent pas être comptées comme uniques.

En utilisant PHP, par exemple, il est simple d'obtenir l'adresse IP d'un visiteur et de la stocker dans un fichier texte (ou une base de données sql).

Une solution côté serveur fonctionnera sur toutes les machines, car vous allez suivre l'utilisateur lors du premier chargement de votre site. N'utilisez pas de javascript, car il est destiné aux scripts côté client, et l'utilisateur peut l'avoir désactivé dans tous les cas.

J'espère que cela pourra aider.

différent
la source
4
Ma femme et moi naviguons depuis quatre ordinateurs différents derrière un pare-feu NAT à la maison. Nous apparaissons comme ayant la même adresse IP, donc selon votre schéma, nous apparaissons comme le même utilisateur.
Adam Ness
Et si dans mysql pour écrire des variables supplémentaires (mentionnées ici panopticlick.eff.org/browser-uniqueness.pdf )? L'adresse IP serait donc la même, mais certaines autres caractéristiques peuvent être différentes.
Andris
3

Parce que je veux que la solution fonctionne sur toutes les machines et tous les navigateurs (dans des limites raisonnables), j'essaie de créer une solution en utilisant javascript.

N'est-ce pas une très bonne raison de ne pas utiliser javascript?

Comme d'autres l'ont dit - les cookies sont probablement votre meilleure option - soyez simplement conscient des limites.

Draemon
la source
3

Vous pouvez utiliser fingerprintjs2

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 
})

Après cela, vous pouvez vérifier tous vos utilisateurs par rapport à l'existant et vérifier la similitude JSON, donc même si leur empreinte digitale mute, vous pouvez toujours les suivre.

Boîte à outils
la source
2

Je suppose que le verdict est que je ne peux pas identifier de manière unique par programme un ordinateur qui visite mon site Web.

J'ai la question suivante. Lorsque j'utilise une machine qui n'a jamais visité mon site Web de banque en ligne, on me demande une authentification supplémentaire. puis, si je retourne une seconde fois sur le site de banque en ligne, je ne reçois pas l'authentification supplémentaire. en lisant les réponses à ma question, j'ai décidé qu'il devait s'agir d'un cookie. par conséquent, j'ai supprimé tous les cookies dans IE et je me suis reconnecté sur mon site de banque en ligne en m'attendant à ce que les questions d'authentification soient à nouveau posées. à ma grande surprise, on ne m'a pas demandé. Cela ne laisse-t-il pas croire que la banque fait une sorte de marquage de PC qui n'implique pas de cookies?

De plus, après avoir beaucoup cherché sur Google aujourd'hui, j'ai trouvé la société suivante qui prétend vendre une solution qui identifie de manière unique les machines qui visitent un site Web. http://www.the41.com/products.asp .

J'apprécie toutes les bonnes informations si vous pouviez clarifier davantage ces informations contradictoires que j'ai trouvées, je l'apprécierais grandement.

qui est invalide
la source
Sur la base de ceci: the41.com/download/ ... Il semble que leur solution consiste à faire télécharger à l'utilisateur un logiciel qui crée un identifiant unique basé sur la machine et le lie à certaines informations de connexion.
mmacaulay
Comme mentionné précédemment, vous n'avez pas exclu votre banque d'utiliser un cookie Flash. Comment effacer les cookies Flash et autres discussions sur le problème: tips.vlaurie.com/2007/10/24/…
micahwittman
Ma supposition: la banque vous fait probablement confiance si vous (1) connaissez votre nom d'utilisateur, (2) connaissez votre mot de passe, et soit (3a) ont leur cookie, soit (3b) proviennent d'une adresse IP qu'ils ont précédemment associé à vous.
Zack Peterson
2

Je ferais cela en utilisant une combinaison de cookies et de cookies flash. Créez un GUID et stockez-le dans un cookie. Si le cookie n'existe pas, essayez de le lire à partir du cookie flash. S'il n'est toujours pas trouvé, créez-le et écrivez-le dans le cookie flash. De cette façon, vous pouvez partager le même GUID entre les navigateurs.

Eric Hogue
la source
1

Je pense que les cookies sont peut-être ce que vous recherchez; c'est ainsi que la plupart des sites Web identifient les visiteurs de manière unique.

Steve
la source
0

En supposant que vous ne vouliez pas que l'utilisateur contrôle, vous ne pouvez pas. Le Web ne fonctionne pas comme ça, le mieux que vous puissiez espérer, ce sont des heuristiques.

Si c'est une option pour forcer votre visiteur à installer un logiciel et à utiliser TCPA, vous pourrez peut-être retirer quelque chose.

John Nilsson
la source
0

Mon message n'est peut-être pas une solution, mais je peux fournir un exemple où cette fonctionnalité a été implémentée.

Si vous visitez la page d'inscription de www.supertorrents.orgpour la première fois depuis votre ordinateur, tout va bien. Mais si vous actualisez la page ou ouvrez à nouveau la page, cela identifie que vous avez déjà visité la page. La vraie beauté vient ici - elle identifie même si vous réinstallez Windows ou un autre système d'exploitation.

J'ai lu quelque part qu'ils stockaient l'identifiant du processeur. Bien que je ne puisse pas trouver comment le faire, j'en doute sérieusement, et ils pourraient utiliser l'adresse MAC pour le faire.

Je partagerai certainement si je trouve comment le faire.

Monsieur Programmeur
la source
www.supertorrents.org est mort
Toolkit
0

Un truc:

  1. Créez 2 pages d'inscription:

    Première page d'inscription: sans e-mail ni vérification de sécurité (juste avec nom d'utilisateur et mot de passe)

    Deuxième page d'inscription: avec un niveau de sécurité élevé (demande de vérification par e-mail et image de sécurité, etc.)

  2. Pour la satisfaction du client et une inscription facile, la page d'inscription par défaut doit être la (Première page d'inscription) mais dans la (Première page d'inscription) il y a une restriction cachée. C'est la restriction IP. Si une adresse IP a tenté de s'enregistrer pour la deuxième fois (par exemple moins d'une heure) au lieu d'afficher la page de blocage. vous pouvez afficher automatiquement la (Deuxième page d'enregistrement) .

  3. dans la (Première page d'inscription), vous pouvez définir (par exemple: bloquer 2 tentatives de 1 ip pendant seulement 1 heure ou 24 heures) et après (par exemple) 1 heure, vous pouvez ouvrir l'accès à partir de cette ip automatiquement

Veuillez noter: (Première page d'inscription) et (Deuxième page d'inscription) ne doivent pas être dans des pages séparées. vous ne faites qu'une page. (par exemple: register.php) et permettez de basculer entre le premier style PHP et le deuxième style PHP

Mahdi Jazini
la source
Mahdi Jazini .Tout a raison, mais ma question est de savoir comment vous identifiez l'adresse IP de la machine cliente.Merci.
JENKINS J