No creo que sea completamente posible con solo JavaScript / PHP (o algún otro lenguaje del lado del servidor) para imprimir / identificar de forma única una computadora.
Recuerde, haga lo que haga, alguien con intenciones maliciosas puede copiar el directorio de datos de usuario de Chrome / Firefox en un sistema similar (el mismo sistema operativo, etc.). De hecho, esa es la cosa más fácil , ya que no tienes que buscar las cookies. JavaScript no puede leer nada fuera de estos directorios, por lo que acaban de duplicar el sistema.
Sin embargo, usted puede usar Flash / JavaScript para crear huellas digitales en el navegador . Desafortunadamente, la huella digital del navegador puede cambiar si el usuario instala fuentes / etc. Además, los usuarios tendrán que permitir que se ejecute Flash / JavaScript; en la actualidad, muchas personas están desactivando JavaScript debido a la reciente vulnerabilidad de 0 días. No quieres forzar a tus usuarios a usar estos. De todos modos, uno puede replicar fácilmente una huella dactilar replicando el sistema (lo que lleva tiempo, pero no es demasiado difícil).
Al final, la autenticación de dos factores tiene que ver con (a) tener una contraseña y (b) tener acceso físico a un dispositivo. Si le está dando a alguien acceso no supervisado a su computadora mientras está conectado como usted, la parte (b) está comprometida de todos modos, de una manera diferente.
Para responder a tu pregunta, sin embargo:
- Puede poner un GUID único en una cookie
- Puedes poner otro GUID en
localStorage
- Puede asociar parte del encabezado de solicitud del Agente de usuario con la cuenta. Por ejemplo, mi agente de usuario es
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
. Desde aquí, puede extraer el nombre de mi navegador (que no cambiará), el nombre del sistema operativo y la versión (que cambiará ocasionalmente ), ya sea que mi computadora sea de 32 bits, etc.
-
navigator.plugins
- Esta es una matriz de todos los complementos instalados en el navegador. Tal vez no sea una buena idea para la autenticación de 2 factores, ya que esto cambia con frecuencia.
Tenga en cuenta que todos estos pueden ser fácilmente falsificados. Solo es un problema adicional para que un pirata informático salte adelante.
Nuevamente, puede intentar usar técnicas de toma de huellas digitales que se ocupan de leer la lista de fuentes instaladas, etc. Una vez más, esto puede ser evitado, pero es mucho más difícil. También puede usar JavaScript para almacenar archivos de tipo cookie en lugares aleatorios en la computadora (no estoy seguro de si es una buena idea)
Editar: Como Joel menciona en los comentarios, también debería tener una forma de revocar "computadoras confiables" (simplemente disocie el GUID en su base de datos). Y esto debería aplicarse cuando la contraseña también se cambia.