Estoy desarrollando una aplicación que tiene una relación cliente-servidor, y tengo problemas para decidir el algoritmo por el cual se determina el identificador de sesión. Mi objetivo es impedir que los impostores adquieran los datos privados de otros usuarios.
Estoy considerando dos opciones:
Opción 1: genere una cadena hexadecimal aleatoria de 32 caracteres, almacénela en una base de datos y pásela del servidor al cliente una vez que haya iniciado sesión correctamente. Luego, el cliente almacena este identificador y lo usa en cualquier solicitud futura al servidor, lo que lo compararía con el identificador almacenado.
Opción 2: cree un hash a partir de una combinación de la hora de inicio de la sesión y el nombre de usuario de inicio de sesión del cliente y / o la contraseña con hash y úsela para todas las futuras solicitudes al servidor. El hash de la sesión se almacenaría en una base de datos a partir de la primera solicitud y se verificará en forma cruzada para cualquier solicitud futura del cliente.
Otra información: Se pueden conectar varios clientes simultáneamente desde la misma IP, y no hay dos clientes que tengan el mismo identificador de sesión.
Pregunta: ¿Cuál de estas opciones es un mejor enfoque con respecto a mis preocupaciones (a continuación) sobre cada una?
Mi preocupación sobre la primera opción es que el identificador es completamente aleatorio y, por lo tanto, podría ser replicado por casualidad (aunque es un 1 en una posibilidad 3.4 * 10 38 ) , y se utiliza para "robar" datos privados de un usuario (que también necesitarían estar usando el cliente en ese momento).
Mi preocupación con respecto a la segunda opción es que tiene una falla de seguridad, a saber, que si se intercepta de alguna manera la contraseña con hash de un usuario, se podría falsificar todo el hash de la sesión y robar los datos privados del usuario.
Gracias por todas y cada una de las entradas.