Tengo problemas para entender cómo se almacenaría de forma segura una cookie con hash. Y cómo realmente hash una cookie.
Esta es la situación: Cada visitante (no usuario, sino también visitante no registrado) del sitio web obtiene su propia 'página secreta', allí puede ingresar información 'secreta'. El problema es que el visitante obtiene esto sin la necesidad de seleccionar una contraseña o algo relacionado. La clave secreta se genera automáticamente y se almacena como una cookie. El problema: si la cookie se ve comprometida, el atacante puede "falsificar" su propia clave secreta cambiando su propia clave, en esa del usuario.
Pensé que podía solucionar este problema al:
- Generando una clave única para cada usuario
- Guarda la versión con hash en la base de datos
- Guardar la versión con hash en una cookie
- Cuando el visitante visita, compruebe si la cookie con hash coincide con el valor de la base de datos
Problema: el atacante podría copiar solo el hash de la cookie. Porque, después de todo, es solo texto sin formato y todavía coincidiría con el valor de la base de datos.
O usando este método:
- La clave generada (A) se encripta utilizando, por ejemplo, AES con la clave B. La cadena generada se almacena en una base de datos.
- La clave B se almacena en una cookie; con ID de visitante
- Cuando el visitante visita, tomo su ID de visitante para saber en qué fila En mi base de datos tengo que buscar, y si la clave B descifra con éxito la "cadena", el usuario tiene acceso a la clave A para acceder a la clave secreta.
Pero este es exactamente el mismo problema que el anterior ...
Estoy luchando con el hecho de que, además de la longitud, una contraseña permanece segura siempre que el usuario mantenga su montículo cerrado o su PC libre de malware. Pero como el robo de cookies es tan fácil, necesito otro mecanismo para las cookies.
Entonces, ¿cómo protejo a los visitantes del robo de cookies en esta situación? No estoy pidiendo banderas como HttpOnly o algo relacionado, sino realmente un algoritmo / mecanismo / ... Solo necesito asegurarme de que el usuario es el mismo usuario que en las sesiones anteriores. Y alguien más no cambió su cookie en la del otro usuario. Todo esto sin ninguna interacción (correo electrónico, nombre de usuario, contraseña) del visitante.