Non penso che sia interamente possibile con solo JavaScript / PHP (o qualche altro linguaggio lato server) per imprimere / identificare un computer in modo univoco.
Ricorda, qualunque cosa tu faccia, qualcuno con intenzioni malevole può semplicemente copiare la directory dei dati utente di Chrome / Firefox su un sistema simile (stesso sistema operativo, ecc.). In effetti, questa è la cosa più semplice da fare, dato che non devi cercare i cookie. JavaScript non può leggere nulla al di fuori di queste directory, quindi hanno appena duplicato il sistema.
Tuttavia, puoi utilizzare Flash / JavaScript per impronta digitale del browser . Sfortunatamente, l'impronta digitale del browser può cambiare se l'utente installa font / etc. Inoltre, i tuoi utenti dovranno consentire l'esecuzione di Flash / JavaScript - oggigiorno un bel po 'di persone stanno disabilitando JavaScript a causa del recente exploit di 0 giorni. Non vuoi forzare i tuoi utenti a doverli utilizzare. Ad ogni modo, si può facilmente replicare un'impronta digitale replicando il sistema (che richiede tempo, ma non è troppo difficile).
Alla fine, l'autenticazione a due fattori riguarda (a) avere una password e (b) avere accesso fisico a un dispositivo. Se stai dando accesso senza supervisione al tuo computer mentre sei loggato come te, la parte (b) è comunque compromessa, in un modo diverso.
Per rispondere alla tua domanda, però:
- Puoi inserire un GUID univoco in un cookie
- Puoi inserire un altro GUID in
localStorage
- È possibile associare parte dell'intestazione della richiesta User-Agent del browser con l'account. Ad esempio, il mio User Agent è
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/536.11 (KHTML, like Gecko) Ubuntu/12.04 Chromium/20.0.1132.47 Chrome/20.0.1132.47 Safari/536.11
. Da qui puoi estrarre il nome del mio browser (che non cambierà), il nome e la versione del sistema operativo (che cambierà di tanto in tanto ), indipendentemente dal fatto che il mio computer sia a 32 bit, ecc.
-
navigator.plugins
- Questa è una matrice di tutti i plugin installati sul browser. Forse non è una buona idea per l'autenticazione a 2 fattori, dato che questo cambia spesso.
Si noti che tutti questi possono essere facilmente falsificati. Sono solo dei cerchi in più per un hacker da cui saltare.
Ancora una volta, puoi provare a utilizzare le tecniche di impronte digitali che riguardano la lettura dell'elenco di caratteri installati, ecc. Ancora, questo può essere aggirato, ma è molto più difficile. Puoi anche utilizzare JavaScript per archiviare file simili a cookie in posizioni casuali sul computer (non è sicuro se sia una buona idea)
Modifica: come menziona Joel nei commenti, dovresti anche avere un modo di revocare "computer fidati" (basta dissociare il GUID nel tuo database). E questo dovrebbe applicarsi anche quando viene cambiata la password.