En resumen, deberías usar un token aleatorio de una sola vez de fuerza criptográfica y codificarlo en la base de datos.
El token
-
debe permitirse su uso una sola vez,
-
debe solo ser utilizable para el usuario para el que fue creado,
-
debe solo enviarse a través de HTTPS,
-
debería tener una fecha de caducidad (por ejemplo, 7 días).
Una vez que el usuario inicia sesión con el token, no es válido y se debe crear un token nuevo para el usuario. En el caso de un token caducado, se debe hacer que el usuario inicie sesión nuevamente, utilizando sus credenciales reales.
Se puede encontrar una descripción más definitiva y extensa de estas reglas en la parte 2 de La guía definitiva para la autenticación de sitios web basada en formularios :
Las cookies de inicio de sesión persistentes (funcionalidad "recordarme") son una zona de peligro; por un lado, son tan seguros como los inicios de sesión convencionales cuando los usuarios entienden cómo manejarlos; y, por otro lado, representan un enorme riesgo para la seguridad en manos de la mayoría de los usuarios, que los usan en computadoras públicas, se olvidan de cerrar sesión, no saben qué son las cookies o cómo eliminarlas, etc.
[...◆
Siga el artículo de "Mejores prácticas" de Charles Miller . No se sienta tentado a seguir las Mejores prácticas "mejoradas" vinculadas al final de su artículo. Lamentablemente, las "mejoras" del esquema se pueden frustrar fácilmente (todo lo que un atacante debe hacer cuando robar la cookie "mejorada" es recordar eliminar la anterior. Esto requerirá que el usuario legítimo vuelva a iniciar sesión, creando un nuevo identificador de serie y dejando el robado válido).
Y NO ALMACENAR LA COOKIE PERSONALIZADA DE INICIO DE SESIÓN (TOKEN) EN SU BASE DE DATOS, ¡SÓLO UN HASH DE ELLO! El token de inicio de sesión es equivalente a la contraseña, por lo tanto, si un atacante tiene en su base de datos, podría usar los tokens para iniciar sesión en cualquier cuenta, como si fueran combinaciones de contraseña de inicio de sesión de texto simple. Por lo tanto, use el hashing con sal fuerte (bcrypt / phpass) cuando almacene tokens de inicio de sesión persistentes.
Actualización: Lo siento, entendí mal la pregunta. El método que vinculate parece razonable, pero no te protegerá de los ataques de repetición o de la persona en el medio. Deberías usar SSL a su lado.