Come posso identificare in modo univoco i computer che visitano il mio sito Web?


184

Devo trovare un modo per identificare in modo univoco ogni computer che visita il sito Web che sto creando. Qualcuno ha qualche consiglio su come raggiungere questo obiettivo?

Perché voglio che la soluzione funzioni su tutte le macchine e tutti i browser (entro limiti ragionevoli) sto provando a creare una soluzione usando JavaScript.

I cookie non lo faranno.

Ho bisogno della capacità di creare fondamentalmente una guida unica per un computer e ripetibile, supponendo che al computer non siano avvenute modifiche hardware. Le indicazioni a cui sto pensando sono ottenere il MAC della scheda di rete e altre informazioni di questo tipo che identificheranno la macchina che visita il sito Web.


4
Non puoi ottenere il mac della loro scheda di rete: l'IP non contiene tali informazioni, il meglio che puoi ottenere è l'indirizzo IP del loro gateway ISP. Per alcuni ISP che potrebbero essere gli stessi per tutti gli utenti in una determinata città.
Martin Beckett,

1
Il fatto che non si desidera che l'utente sia in grado di falsificarlo. La risposta è ovviamente che questo non può essere fatto senza alcuni dei tuoi componenti privilegiati installati sul computer degli utenti.
AnthonyWJones,

Gli indirizzi MAC sono banalmente facili da falsificare. La mia piccola connessione wireless scadente passerà attraverso il tuo MAC, sostituirà la sua o utilizzerà quella che hai specificato.
Kent Brewster,

Questo non può essere fatto - i cookie sono la soluzione migliore
Draemon,

Si prega di leggere la mia risposta in questa pagina. ho un'ottima idea per questo problema :)
Mahdi Jazini,

Risposte:


58

Queste persone hanno sviluppato un metodo di impronte digitali per riconoscere un utente con un alto livello di precisione:

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

Esaminiamo il grado in cui i moderni browser Web sono soggetti a "fingerprinting del dispositivo" tramite la versione e le informazioni di configurazione che trasmetteranno ai siti Web su richiesta. Abbiamo implementato un possibile algoritmo di impronte digitali e abbiamo raccolto queste impronte digitali da un ampio campione di browser che hanno visitato il nostro lato test, panopticlick.eff.org. Osserviamo che la distribuzione della nostra impronta digitale contiene almeno 18,1 bit di entropia, il che significa che se scegliamo un browser a caso, nella migliore delle ipotesi ci aspettiamo che solo uno su 286.777 altri browser condividerà la sua impronta digitale. Tra i browser che supportano Flash o Java, la situazione è peggiore, con il browser medio che trasporta almeno 18,8 bit di informazioni di identificazione. Il 94,2% dei browser con Flash o Java era unico nel nostro esempio.

Osservando i visitatori di ritorno, stimiamo la rapidità con cui le impronte digitali del browser potrebbero cambiare nel tempo. Nel nostro esempio, le impronte digitali sono cambiate abbastanza rapidamente, ma anche una semplice euristica era in genere in grado di indovinare quando un'impronta digitale era una versione “aggiornata” dell'impronta digitale di un browser precedentemente osservato, con il 99,1% delle ipotesi corrette e un tasso di falsi positivi solo dello 0,86% .

Discutiamo quali impronte digitali del browser per le minacce alla privacy rappresentano in pratica e quali contromisure potrebbero essere appropriate per prevenirlo. Esiste un compromesso tra la protezione contro la stampabilità delle dita e alcuni tipi di debuggabilità, che nei browser attuali è fortemente penalizzata dalla privacy. Paradossalmente, le tecnologie di privacy anti-impronte digitali possono essere autolesionanti se non vengono utilizzate da un numero sufficiente di persone; dimostriamo che alcune misure sulla privacy sono attualmente vittime di questo paradosso, ma altre non ...


14
Sono uno sviluppatore, sono venuto qui per cercare una soluzione rapida o un piccolo frammento di codice. Questo documento non mostra come implementarlo. Voglio sapere come implementarlo per poter tracciare utenti unici per il mio sito.
Oliver,

10
@Oliver Hai ragione. Questo non ti dà la risposta su un piatto. Richiede un'ulteriore lettura, comprensione di tutti i problemi coinvolti e perché è improbabile che un semplice frammento di codice funzioni mai completamente. Uno sviluppatore intraprendente potrebbe scrivere una libreria che fa tutto il duro lavoro e consentire alle persone che cercano una "soluzione rapida" di beneficiare in futuro.
Jonathan,

2
La risposta è anche solo link. Un riepilogo delle tecniche descritte nel PDF sarebbe apprezzato nel caso in cui il PDF non fosse disponibile.
Damian Yerrick,

2
Vedere la mia risposta qui per un pacchetto di open source e facile-ish da implementare impronte digitali stackoverflow.com/a/47536192/3650835
KayakinKoder

Quindi farò meglio a creare un "biscotto" resistente con un grande numero casuale: D
Luis Mauricio

49

introduzione

Non so se ci sia o ci sarà mai un modo per identificare in modo univoco le macchine usando solo un browser. Le ragioni principali sono:

  • Dovrai salvare i dati sul computer degli utenti. Questi dati possono essere cancellati dall'utente in qualsiasi momento. A meno che tu non abbia un modo per ricreare questi dati che sono unici per ogni macchina, allora sei bloccato.
  • Convalida. Devi stare attento allo spoofing, al dirottamento della sessione, ecc.

Anche se ci sono modi per tracciare un computer senza usare i cookie, ci sarà sempre un modo per bypassarlo e un software che lo farà automaticamente. Se hai davvero bisogno di tracciare qualcosa basato su un computer, dovrai scrivere un'applicazione nativa (Apple Store / Android Store / Programma Windows / ecc.).

Potrei non essere in grado di darti una risposta alla domanda che hai posto, ma posso mostrarti come implementare il monitoraggio della sessione. Con il monitoraggio delle sessioni si tenta di tenere traccia della sessione di navigazione anziché del computer che visita il sito. Tracciando la sessione, lo schema del database sarà simile al seguente:

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

Vantaggi del monitoraggio basato sulla sessione:

  1. Per gli utenti che hanno effettuato l'accesso, è sempre possibile generare lo stesso ID sessione dagli utenti username/ password/ email.
  2. Puoi comunque tenere traccia degli utenti guest utilizzando sessionID.
  3. Anche se più persone utilizzano lo stesso computer (ad es. Cybercafe), è possibile seguirle separatamente se effettuano l'accesso.

Svantaggi del monitoraggio basato sulla sessione:

  1. Le sessioni sono basate su browser e non su computer. Se un utente utilizza 2 browser diversi, si otterranno 2 sessioni diverse. Se questo è un problema, puoi smettere di leggere qui.
  2. Le sessioni scadono se l'utente non ha effettuato l'accesso. Se un utente non ha effettuato l'accesso, utilizzerà una sessione ospite che verrà invalidata se l'utente elimina i cookie e la cache del browser.

Implementazione

Esistono molti modi per implementarlo. Non credo di poterle coprire tutte, elencherò solo il mio preferito che renderebbe questa una risposta supponente . Tienilo a mente.

Nozioni di base

Tracciamo la sessione utilizzando quello che è noto come un cookie per sempre. Si tratta di dati che si ricrea automaticamente se l'utente cancella i suoi cookie o aggiorna il suo browser. Non sopravviverà comunque all'utente che cancella sia i cookie che la cache di navigazione.

Per implementare questo userò il meccanismo di memorizzazione nella cache dei browser ( RFC ), l'API WebStorage ( MDN ) e i cookie del browser ( RFC , Google Analytics ).

legale

Al fine di utilizzare gli ID di tracciamento, è necessario aggiungerli sia alla politica sulla privacy sia ai termini di utilizzo, preferibilmente sotto il sottotitolo Tracciamento . Useremo i seguenti tasti su entrambi document.cookiee window.localStorage:

  • _ga : dati di Google Analytics
  • __utma : cookie di tracciamento di Google Analytics
  • sid : SessionID

Assicurati di includere collegamenti alla tua Informativa sulla privacy e termini di utilizzo in tutte le pagine che utilizzano il monitoraggio.

Dove posso conservare i dati della mia sessione?

È possibile archiviare i dati della sessione nel database del sito Web o sul computer degli utenti. Dal momento che lavoro normalmente su siti più piccoli (consento più di 10 mila connessioni continue) che utilizzano applicazioni di terze parti (Google Analytics / Clicky / ecc.) È meglio per me archiviare i dati sul computer client. Questo ha i seguenti vantaggi:

  1. Nessuna ricerca nel database / sovraccarico / carico / latenza / spazio / ecc.
  2. L'utente può cancellare i propri dati ogni volta che lo desidera senza la necessità di scrivermi fastidiose e-mail.

e svantaggi:

  1. I dati devono essere crittografati / decrittografati e firmati / verificati, il che crea un sovraccarico della CPU sul client (non così male) e sul server (bah!).
  2. I dati vengono eliminati quando l'utente elimina i cookie e la cache. (questo è quello che voglio davvero)
  3. I dati non sono disponibili per l'analisi quando gli utenti non sono in linea. (analisi solo per gli utenti che navigano attualmente)

UUID

  • BrowserID : ID univoco generato dalla stringa dell'agente utente del browser.Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID : generato dall'indirizzo IP dell'utente e dalla chiave di sessione HTTPS. getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID : fingerprinting basato su JavaScript basato su fingerprint.js modificato .FingerPrint.get()
  • SessionID : chiave casuale generata quando l'utente visita il primo sito.BrowserID|ComputerID|randombytes(256)
  • GoogleID : generato da __utmacookie.getCookie(__utma).uniqueid

Meccanismo

L'altro giorno stavo guardando lo spettacolo di Wendy Williams con la mia ragazza ed ero completamente inorridito quando l'host ha consigliato ai suoi spettatori di cancellare la loro cronologia del browser almeno una volta al mese. L'eliminazione della cronologia del browser ha normalmente i seguenti effetti:

  1. Elimina la cronologia dei siti Web visitati.
  2. Elimina i cookie e window.localStorage(aww man).

La maggior parte dei browser moderni rende questa opzione prontamente disponibile ma non teme gli amici. Perché c'è una soluzione. Il browser ha un meccanismo di memorizzazione nella cache per memorizzare script / immagini e altre cose. Di solito anche se cancelliamo la nostra cronologia, questa cache del browser rimane comunque. Tutto ciò di cui abbiamo bisogno è un modo per archiviare i nostri dati qui. Ci sono 2 metodi per farlo. Il migliore è utilizzare un'immagine SVG e archiviare i nostri dati all'interno dei suoi tag. In questo modo i dati possono ancora essere estratti anche se JavaScript è disabilitato usando Flash. Tuttavia, poiché è un po 'complicato, mostrerò l'altro approccio che utilizza JSONP ( Wikipedia )

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

Ora possiamo ottenere la nostra chiave di sessione in qualsiasi momento:

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

Come faccio a tenere il tracking.js nel browser?

Possiamo raggiungere questo obiettivo usando le intestazioni HTTP Cache-Control , Last-Modified ed ETag . Possiamo usare SessionIDcome valore per l'intestazione etag:

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

Last-Modifiedheader dice al browser che questo file non viene praticamente mai modificato. Cache-Controlindica ai proxy e ai gateway di non memorizzare nella cache il documento, ma indica al browser di memorizzarlo nella cache per 1 anno.

La prossima volta che il browser richiede il documento, invierà If-Modified-Sincee le If-None-Matchintestazioni. Possiamo usarli per restituire una 304 Not Modifiedrisposta.

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

Ora ogni volta che il browser richiede che il tracking.jsnostro server risponda con un 304 Not Modifiedrisultato e imponga l'esecuzione della copia locale di tracking.js.

Ancora non capisco. Spiegamelo

Supponiamo che l'utente cancelli la cronologia di navigazione e aggiorni la pagina. L'unica cosa rimasta sul computer degli utenti è una copia tracking.jsnella cache del browser. Quando il browser lo richiede tracking.js, riceve una 304 Not Modifiedrisposta che gli fa eseguire la prima versione tracking.jsricevuta. tracking.jsesegue e ripristina SessionIDciò che è stato eliminato.

Validazione

Supponiamo che Haxor X rubi i cookie dei nostri clienti mentre sono ancora connessi. Come li proteggiamo? Crittografia e impronte digitali del browser in soccorso. Ricorda che la nostra definizione originale per SessionIDera:

BrowserID|ComputerID|randomBytes(256)

Possiamo cambiarlo in:

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

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

Ora possiamo convalidare il nostro SessionIDutilizzando il seguente algoritmo:

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; 

Ora, affinché l'attacco di Haxor funzioni, devono:

  1. Avere lo stesso ComputerID. Ciò significa che devono avere lo stesso provider di servizi Internet della vittima (Tricky). Ciò darà alla nostra vittima l'opportunità di intraprendere un'azione legale nel proprio paese. Haxor deve anche ottenere la chiave di sessione HTTPS dalla vittima (Difficile).
  2. Avere lo stesso BrowserID. Chiunque può falsificare la stringa User-Agent (fastidiosa).
  3. Essere in grado di creare il proprio falso SessionID(molto difficile). Gli attacchi di volume non funzioneranno perché utilizziamo un timestamp per generare la chiave di crittografia / firma, quindi sostanzialmente è come generare una nuova chiave per ogni sessione. Inoltre, crittografiamo i byte casuali, quindi anche un semplice attacco del dizionario è fuori discussione.

Possiamo migliorare la convalida inoltrando GoogleIDe FingerprintID(tramite ajax o campi nascosti) e confrontandoli con quelli.

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

1
questa è una bella risposta a proposito. Tante informazioni. Sono sorpreso che tu non abbia più voti. Onestamente non riesco a credere che esista la tecnica con svgs e jsonp, ma deve. Non esiste una libreria che ricorre a tale tecnica quando i cookie / localStorage / sessionStorage sono disabilitati?
faceyspacey.com

Inoltre, mi chiedo se esiste una versione avanzata di questo per usare semplicemente il tuo file track.js memorizzato nella cache (o più file di questo tipo) per usarlo come essenzialmente archivio locale / cookie, cioè per ricordare molti dati. L'idea sarebbe che una libreria abbia metodi come storageFacade.setIteme 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` di tutte le differenze create durante la sessione che viene automaticamente creata ogni tanto.
faceyspacey.com

Se il manifest fosse creato solo una volta ogni tanto, essenzialmente limiterebbe il numero di manifest creati. E poi in javascript potresti provare a richiedere tutti i possibili manifest creati e quindi utilizzare l'ultimo per ricostruire lo stato dalle istantanee diff. Se avessimo solo diff, potrebbero essercene centinaia o migliaia e questo potrebbe essere un problema di prestazioni per cercare di recuperarli tutti fino a quando uno fallisce. Vale a dire recuperare il diff o manifest in modo incrementale: manifest-1.js, manifest-2.js, ecc., Fino a quando uno fallisce (perché non esiste). Ciò significa che hai tutti i manifest (o diff)
faceyspacey.com

@ faceyspacey.com Spiacente, mai biblioteche. Devi codificare e aggiornare costantemente la tua soluzione personalizzata. Pensaci. Non appena si sviluppa una lib per questo, tutti i bloccanti / browser / etc aggiunti la contrasterebbero immediatamente. L'unico motivo per cui funziona è perché si basa su una funzionalità del browser principale molto importante che semplicemente non rimuoveranno / disabiliteranno: CACHING. Continuo a perdere i miei accessi e le mie password. E dal momento che non faccio più molte domande, non ho bisogno di rispondere a molte in modo da poter lasciare taglie con reputazione. Ho appena visto questo e ho capito che non c'era una vera risposta.
Walter,

30

Non è possibile identificare i computer che accedono a un sito Web senza la collaborazione dei rispettivi proprietari. Se ti consentono, tuttavia, puoi memorizzare un cookie per identificare la macchina quando visita nuovamente il tuo sito. La chiave è che il visitatore ha il controllo; possono rimuovere il cookie e apparire come nuovo visitatore ogni volta che lo desiderano.


7
Se visita il tuo sito con 3 browser diversi, avrà 3 cookie diversi poiché i cookie non sono condivisi tra le app. Inoltre, se utilizza DHCP anziché un indirizzo IP statico, probabilmente non avrà lo stesso indirizzo IP per il suo computer a lungo.
Johnny Software

2
Sì e no. L'impronta digitale del browser identifica un profilo del browser con un alto grado di probabilità, ma non è l'identificazione uno a uno assoluta richiesta in questa domanda. È anche abbastanza semplice (ma forse non facile ) per un utente esperto aggirare deliberatamente se lo desidera.
Erickson,

30

Una possibilità sta usando i cookie flash :

  • Disponibilità onnicomprensiva (il 95 percento dei visitatori avrà probabilmente il flash)
  • Puoi memorizzare più dati per cookie (fino a 100 KB)
  • Condiviso tra i browser, quindi è più probabile che identifichi in modo univoco una macchina
  • La cancellazione dei cookie del browser non rimuove i cookie flash.

Dovrai creare un piccolo filmato flash (nascosto) per leggerli e scriverli.

Qualunque sia il percorso che scegli, assicurati che i tuoi utenti optino per il tracciamento, altrimenti stai invadendo la loro privacy e diventi uno dei cattivi.


5
Molti utenti usano Flashblock. Flash verrà attivato dall'utente con un clic se lo desidera vedere.
Horcrux7,

3
Esistono metodi per rimuovere i cookie, ma sono oltre l'utente medio. Ci sono pagine sul sito Web di Adobe per la visualizzazione e la rimozione di LSO (Local Shared Object en.wikipedia.org/wiki/Local_Shared_Object ) sebbene per gli utenti di Firefox il componente aggiuntivo Obiezione sia il metodo più semplice per rimuoverli
Sam Hasler,

Penso che questa sia una delle migliori soluzioni. Youtube, Google ecc. Usano gli LSO per combattere gli abusi.
Uku Loskit,

4
I cookie flash possono essere facilmente eliminati come i cookie HTTP nelle versioni moderne di Firefox e Chrome: 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
La situazione è cambiata negli ultimi nove anni. Al giorno d'oggi, il 95 percento degli utenti non è nemmeno su desktop e il cellulare non ha mai abbracciato Adobe Flash Player.
Damian Yerrick,

21

Puoi provare a impostare un ID univoco in un evercookie (funzionerà su più browser, consulta le domande frequenti): http://samy.pl/evercookie/

Esiste anche una società chiamata ThreatMetrix che viene utilizzata da molte grandi aziende per risolvere questo problema: http://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ Sono piuttosto costosi e alcuni dei i loro altri prodotti non sono molto buoni, ma il loro ID dispositivo funziona bene.

Infine, c'è questa implementazione jquery open source dell'idea panopticlick: https://github.com/carlo/jquery-browser-fingerprint Sembra piuttosto cotta in questo momento ma potrebbe essere ampliata.

Spero che sia d'aiuto!


+ 1 - Brian - Ottime informazioni! Tutto ciò si è rivelato molto utile. Grazie. Aggiungi ulteriori informazioni se non hai più imparato da allora.
Ben O

1
Per quanto riguarda evercookie. Ho provato con l'Opera. Imposta i cookie, quindi elimina tutta la cronologia da Opera, quindi chiude Opera, si apre di nuovo facendo clic su Click to rediscover cookiese visualizza null o indefinito. Quindi questo non funziona per me
Andris,

Ho provato la pagina di esempio con iOS Safari in modalità privata e Desktop Chrome in incognito, il cookie non può essere recuperato dopo il riavvio del browser.
Morio,

20

Esiste un metodo popolare chiamato fingerprinting su tela, descritto in questo articolo scientifico: Il Web non dimentica mai: meccanismi di localizzazione persistenti in natura . Una volta che inizi a cercarlo, rimarrai sorpreso dalla frequenza con cui viene utilizzato. Il metodo crea un'impronta digitale unica, coerente per ogni combinazione browser / hardware.

L'articolo esamina anche altri metodi di tracciamento persistenti, come evercookies, la rigenerazione di cookie http e Flash e la sincronizzazione dei cookie.

Maggiori informazioni sull'impronta digitale su tela qui:


1
quindi se due dispositivi sono identici (stessi computer batch, stesso sistema operativo, stessi browser), le impronte digitali sono uguali, giusto?
xiaoyu2er,

La vera domanda qui è dove è la libreria javascript che posso inserire nel mio codice per usare questo. Leggere una tonnellata di teoria non risolve i problemi che devono essere risolti entro i prossimi 60 minuti.
Thanasis Ioannidis,

11

C'è solo una piccola quantità di informazioni che puoi ottenere tramite una connessione HTTP.

  1. IP - Ma come altri hanno già detto, questo non è stato risolto per molti, se non per la maggior parte degli utenti di Internet, a causa delle politiche di allocazione dinamica del proprio ISP.

  2. Stringa Useragent: quasi tutti i browser inviano il tipo di browser che sono ad ogni richiesta. Tuttavia, questo può essere impostato dall'utente in molti browser oggi.

  3. Raccolta di campi richiesta: ci sono altri campi inviati con ogni richiesta, come codifiche supportate, ecc. Questi, se usati nell'aggregato, possono aiutare a identificare la macchina di un utente, ma sono di nuovo dipendenti dal browser e possono essere cambiati.

  4. Cookie: l'impostazione di un cookie è un altro modo per identificare una macchina, o più specificamente un browser su una macchina, ma come altri hanno già detto, questi possono essere eliminati o disattivati ​​dagli utenti e sono applicabili solo su un browser, non su un macchina.

Pertanto, la risposta corretta è che non è possibile ottenere ciò che si vivrebbe solo tramite i protocolli HTTP su IP. Tuttavia, utilizzando una combinazione di cookie, nonché IP e i campi nella richiesta HTTP, hai buone possibilità di indovinare, in un certo senso, quale macchina è. Gli utenti tendono a utilizzare solo un browser, e spesso da una macchina, quindi questo può essere abbastanza affidabile, ma questo varierà a seconda del pubblico ... i tecnici sono più propensi a pasticciare con queste cose e usano più macchine / browser. Inoltre, ciò potrebbe anche essere associato a un tentativo di geolocalizzazione dell'IP e anche di utilizzare quei dati. Ma in ogni caso, non esiste una soluzione che sia corretta per tutto il tempo.


10

Vi sono difetti con approcci sia cookie che non cookie. Ma se riesci a perdonare le carenze dell'approccio con i cookie, ecco un'idea.

Se stai già utilizzando Google Analytics sul tuo sito, non è necessario scrivere codice per tracciare tu stesso utenti unici. Google Analytics lo fa per te tramite il __utmavalore del cookie, come descritto nella documentazione di Google . E riutilizzando questo valore non stai creando un payload di cookie aggiuntivo, con vantaggi in termini di efficienza con le richieste di pagine.

E potresti scrivere del codice abbastanza facilmente per accedere a quel valore o usare la getUniqueId() funzione di questo script .


Riceverò lo stesso ID utilizzando getUniqueId()diversi browser nella stessa macchina?
Ankur Akvaliya,

8

Come con le soluzioni precedenti, i cookie sono un buon metodo, ma tieni presente che identificano i browser . Se visitassi un sito Web in Firefox e quindi in Internet Explorer, i cookie verrebbero archiviati separatamente per entrambi i tentativi. Alcuni utenti disabilitano anche i cookie (ma più persone disabilitano JavaScript).

Un altro metodo da considerare sarebbe l'identificazione dell'IP e del nome host (tenere presente che questi possono variare per utenti IP dial-up / non statici, AOL utilizza anche IP coperta). Tuttavia, poiché questo identifica solo le reti, potrebbe non funzionare così come i cookie.


Un buon punto con l'indirizzo IP che identifica il punto di accesso alla rete - con NAT, ci potrebbero essere interi paesi nascosti dietro un singolo indirizzo IP e non saresti più saggio. Con la carenza di indirizzi IPv4, vedrai comunque aziende o scuole / università piuttosto grandi condividere un singolo indirizzo IP per il suo traffico Internet in uscita.
Piskvor lasciò l'edificio il

6

I suggerimenti per l'utilizzo dei cookie a parte, l'unico set completo di attributi identificativi disponibili per l'interrogazione sono contenuti nell'intestazione della richiesta HTTP. Quindi è possibile utilizzare alcuni sottoinsiemi di questi per creare un identificatore pseudo-univoco per un agente utente (ad es. Browser). Inoltre, la maggior parte di queste informazioni è probabilmente già registrata nel cosiddetto "registro di accesso" del software del server Web per impostazione predefinita e, in caso contrario, può essere facilmente configurata per farlo. Quindi, potrebbe essere sviluppata un'utilità che scansiona semplicemente il contenuto di questo registro, creando impronte digitalidi ogni richiesta composta, ad esempio, dall'indirizzo IP e dalla stringa dell'agente utente, ecc. Più dati disponibili, incluso il contenuto di cookie specifici, aumentano la qualità dell'unicità di questa impronta digitale. Sebbene, come molti altri hanno già affermato, il protocollo HTTP non lo rende sicuro al 100%, nella migliore delle ipotesi può solo essere un indicatore abbastanza buono.


6

Quando utilizzo una macchina che non ha mai visitato il mio sito Web di servizi bancari online, mi viene chiesta un'autenticazione aggiuntiva. quindi, se torno una seconda volta al sito di servizi bancari online, non mi viene chiesta l'autenticazione aggiuntiva ... ho eliminato tutti i cookie in IE e registrato nuovamente sul mio sito di servizi bancari online aspettandomi di ricevere nuovamente le domande di autenticazione. con mia sorpresa non mi è stato chiesto. questo non porta a credere che la banca stia facendo una sorta di codifica per PC che non coinvolge i cookie?

Questo è un tipo abbastanza comune di autenticazione utilizzato dalle banche.

Supponi di accedere al sito web della tua banca tramite example-isp.com. La prima volta che ci sei, ti verrà chiesta la password e un'ulteriore autenticazione. Una volta superato, la banca sa che l'utente "thatisvaliant" è autenticato per accedere al sito tramite example-isp.com.

In futuro, non verrà richiesta un'ulteriore autenticazione (oltre la password) quando si accede al sito tramite example-isp.com. Se si tenta di accedere alla banca tramite another-isp.com, la banca eseguirà nuovamente la stessa routine.

Quindi, per riassumere, ciò che l'identificazione della banca è il tuo ISP e / o netblock, in base al tuo indirizzo IP. Ovviamente non tutti gli utenti del tuo ISP sei tu, motivo per cui la banca ti chiede ancora la password.

Hai mai ricevuto una chiamata da una società di carte di credito per verificare che le cose vadano bene quando usi una carta di credito in un altro paese? Stesso concetto.


4

Davvero, ciò che vuoi fare non può essere fatto perché i protocolli non lo consentono. Se gli IP statici fossero universalmente utilizzati, potresti essere in grado di farlo. Non lo sono, quindi non puoi.

Se vuoi davvero identificare le persone , fagli accedere.

Dal momento che probabilmente si sposteranno in diverse pagine del tuo sito web, hai bisogno di un modo per tenerne traccia mentre si muovono.

Finché sono connessi e stai monitorando la loro sessione all'interno del tuo sito tramite cookie / parametri-link / beacon / qualunque cosa, puoi essere abbastanza sicuro che stanno usando lo stesso computer durante quel periodo.

In definitiva, non è corretto affermare che ti dice quale computer stanno utilizzando se gli utenti non utilizzano la tua rete locale e non dispongono di indirizzi IP statici.

Se quello che vuoi fare è fatto con la collaborazione degli utenti e c'è un solo utente per cookie e loro usano un singolo browser web, basta usare un cookie.


3

I cookie non saranno utili per determinare visitatori unici. Un utente può cancellare i cookie e aggiornare il sito, quindi viene nuovamente classificato come nuovo utente.

Penso che il modo migliore per farlo sia implementare una soluzione lato server (poiché avrai bisogno di un posto dove archiviare i tuoi dati). A seconda della complessità delle tue esigenze per tali dati, dovrai determinare ciò che viene classificato come visita unica. Un metodo ragionevole sarebbe quello di consentire a un indirizzo IP di tornare il giorno seguente e ricevere una visita unica. Diverse visite da un indirizzo IP in un giorno non devono essere considerate uniche.

Utilizzando PHP, ad esempio, è banale ottenere l'indirizzo IP di un visitatore e memorizzarlo in un file di testo (o in un database sql).

Una soluzione lato server funzionerà su tutte le macchine, perché seguirai l'utente al primo caricamento del tuo sito. Non utilizzare javascript, poiché questo è destinato allo scripting lato client, inoltre l'utente potrebbe averlo disabilitato in ogni caso.

Spero che aiuti.


4
Mia moglie ed io navighiamo da quattro diversi computer dietro un firewall NAT a casa. Mostriamo di avere lo stesso IP, quindi secondo il tuo schema mostriamo lo stesso utente.
Adam Ness,

Che cosa succede se in mysql per scrivere variabili aggiuntive (menzionate qui panopticlick.eff.org/browser-uniqueness.pdf )? Quindi l'indirizzo IP sarebbe lo stesso, ma alcune altre caratteristiche potrebbero essere diverse.
Andris,

3

Perché voglio che la soluzione funzioni su tutte le macchine e tutti i browser (entro limiti ragionevoli) sto provando a creare una soluzione usando JavaScript.

Non è davvero un buon motivo per non usare JavaScript?

Come altri hanno già detto - i cookie sono probabilmente la migliore opzione - basta essere consapevoli delle limitazioni.


3

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

Dopodiché puoi controllare tutti i tuoi utenti rispetto a quelli esistenti e verificare la somiglianza JSON, quindi anche se la loro impronta digitale muta, puoi ancora seguirli


2

Immagino che il verdetto sia che non riesco a identificare in modo univoco a livello di codice un computer che sta visitando il mio sito web.

Ho la seguente domanda Quando utilizzo una macchina che non ha mai visitato il mio sito Web di servizi bancari online, mi viene chiesta un'autenticazione aggiuntiva. quindi, se torno al sito di online banking una seconda volta, non mi viene chiesta l'autenticazione aggiuntiva. leggendo le risposte alla mia domanda ho deciso che doveva trattarsi di un cookie. pertanto, ho eliminato tutti i cookie in IE e registrato nuovamente sul mio sito di online banking aspettandomi di ricevere nuovamente le domande di autenticazione. con mia sorpresa non mi è stato chiesto. questo non porta a credere che la banca stia facendo una sorta di codifica per PC che non coinvolge i cookie?

inoltre, dopo aver cercato su Google oggi, ho trovato la seguente azienda che afferma di vendere una soluzione che identifica in modo univoco le macchine che visitano un sito web. http://www.the41.com/products.asp .

apprezzo tutte le buone informazioni se potessi chiarire ulteriormente queste informazioni contrastanti che ho scoperto lo apprezzerei molto.


Sulla base di questo: the41.com/download/… Sembra che la loro soluzione sia far scaricare all'utente un software che crea un identificatore univoco basato sulla macchina e lo lega ad alcune credenziali di accesso.
mmacaulay,

Come già accennato, non hai escluso la tua banca utilizzando un cookie Flash. Come cancellare i cookie Flash e altre discussioni sul problema: tips.vlaurie.com/2007/10/24/…
micahwittman,

La mia ipotesi: la banca probabilmente si fida di te se (1) conosci il tuo nome utente, (2) conosci la tua password e (3a) hanno i loro cookie, oppure (3b) provengono da un indirizzo IP che hanno precedentemente associato a te.
Zack Peterson,

2

Lo farei usando una combinazione di cookie e cookie flash. Crea un GUID e memorizzalo in un cookie. Se il cookie non esiste, prova a leggerlo dal cookie flash. Se non viene ancora trovato, crearlo e scriverlo nel cookie flash. In questo modo è possibile condividere lo stesso GUID tra i browser.


1

Penso che i cookie potrebbero essere quello che stai cercando; questo è il modo in cui la maggior parte dei siti Web identifica in modo univoco i visitatori.


0

Supponendo che non desideri che l'utente abbia il controllo, non puoi. Il web non funziona così, il meglio che puoi sperare è un po 'di euristica.

Se è un'opzione per forzare il visitatore a installare alcuni software e utilizzare TCPA, potresti essere in grado di realizzare qualcosa.


0

Il mio post potrebbe non essere una soluzione, ma posso fornire un esempio in cui questa funzione è stata implementata.

Se visiti la pagina di iscrizione di www.supertorrents.org per la prima volta dal tuo computer, va bene. Ma se aggiorni la pagina o apri di nuovo la pagina, identifica che hai già visitato la pagina. La vera bellezza viene qui: si identifica anche se si reinstalla Windows o altri sistemi operativi.

Ho letto da qualche parte che memorizzano l'ID CPU. Anche se non sono riuscito a trovare il modo in cui lo fanno, ne dubito seriamente e potrebbero usare l'indirizzo MAC per farlo.

Condividerò sicuramente se trovo come farlo.


www.supertorrents.org è morto
Toolkit,

0

Un trucco:

  1. Crea 2 pagine di registrazione:

    Prima pagina di registrazione: senza e-mail o controllo di sicurezza (solo con nome utente e password)

    Seconda pagina di registrazione: con elevato livello di sicurezza (richiesta di verifica e-mail, immagine di sicurezza e così via)

  2. Per la soddisfazione del cliente e la facile registrazione, la pagina di registrazione predefinita dovrebbe essere la (Prima pagina di registrazione) ma nella (Prima pagina di registrazione) è presente una restrizione nascosta. È restrizione IP. Se un IP ha tentato di registrarsi per la seconda volta, (ad esempio meno di 1 ora) invece di mostrare la pagina di blocco. puoi mostrare automaticamente la (Seconda Pagina di Registrazione) .

  3. nella (Prima pagina di registrazione) è possibile impostare (ad esempio: blocco 2 tentativi da 1 ip per solo 1 ora o 24 ore) e dopo (ad esempio) 1 ora, è possibile aprire automaticamente l'accesso da quell'ip

Nota: (Prima pagina di registrazione) e (Seconda pagina di registrazione) non devono essere in pagine separate. fai solo 1 pagina. (ad esempio: register.php) e semplifica il passaggio tra First PHP Style e Second PHP Style


Mahdi Jazini .Tutti hanno ragione, ma la mia domanda è come identificare l'indirizzo IP della macchina client. Grazie.
JENKINS J
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.