Estoy escribiendo un sistema de inicio de sesión para un sitio web que estoy construyendo.
Aquí está la esencia de cómo estoy implementando el sistema de inicio de sesión:cómo implementar un sistema de inicio de sesión para aplicaciones web?
Tengo dos tablas: usuarios y sesiones.
users: uid | uname | pass
sessions: sid | uid | ts | ts_expires
El usuario introduce una combinación de uname/pass.
- si la combinación es incorrecta, me redirecciona a una página de "mala autenticación".
- si la combinación es correcta, I:
- generar un sessionid aleatorio (
sid
) - insertar un registro en
sessions
asociar que sid con el UID del nombre de usuario suministrado. - establece una cookie llamada
sid
con el valor desid
aleatorio que acaba de insertarse ensessions
.
- generar un sessionid aleatorio (
En cada página que necesita el usuario para iniciar sesión en, puedo comprobar:
- si la cookie se establece
- si el SID es válida
Así mis preguntas son:
- ¿Cuáles podrían ser los posibles problemas con este mecanismo?
- ¿Cómo se debe implementar un buen sistema de inicio de sesión?
PD: No uso SSL secure login yet yet. Así que ese es el único problema que veo, a partir de ahora. Y, oh, uso php y mysql, si eso es relevante.
EDIT: almacenar las contraseñas en texto plano no, sino como un MD5 del nombre de usuario concatenado con la contraseña.
Entonces, pass = MD5($uname.$pass)
, por así decirlo.
MD5 puede ser vulnerable al agrietamiento por fuerza bruta. Para mayor seguridad, hash muchas veces y con diferentes sales. Salar con nombre de usuario no es una gran idea, ya que es un valor que es conocido por el cracker potencial. –
, entonces dices que debo hacer hash con sal aleatoria y almacenar la sal junto con la unme/pass en la tabla de usuarios, ¿verdad? – jrharshath
correcto. la sal también puede ser de texto plano. – Malfist