Archivo por CategoríasSeguridad
Seguridad 28 Feb 2007 22:02
Guardando contraseñas
Uno de los temas más delicados cuando gestionamos un sitio web es la gestión de las contraseñas de usuario. Y lo peor es que una vez sepamos un par de cosillas básicas, nos daremos cuenta de lo mal que hacen las cosas algunos grandes portales y muchas pequeñas páginas.
Una regla básica es que la contraseña debe guardarse encriptada. De lo contrario, cualquiera que pueda acceder a la base de datos tendría acceso a todas las claves de los usuarios. Para guardar la clave encriptada, podemos basarnos en el algoritmo MD5, del que por ejemplo PHP ya tiene una implementación. Una de las grandes ventajas del MD5 es que no es reversible. Es decir, una vez tenemos la clave encriptada, no podemos desencriptarla, con lo que si alguien accede a ella, no podrá saber cuál es nuestra clave real.
Para codificar una clave en PHP podemos escribir por ejemplo:
$encriptada = md5($original);
Una vez tenemos la clave encriptada, será la que le pasemos a la base de datos. Hay que decir que la clave encriptada mediante MD5 es bastante larga, por lo que el campo de la contraseña en la tabla de la base de datos deberá ser de 256 bytes.
Vale, muy bien. Ya tenemos la clave encriptada almacenada. Pero ahora, cuando un usuario quiera acceder a su cuenta, ¿cómo comprobamos si la contraseña es correcta? Muy fácil. Basta con encriptar la clave que nos ha pasado el usuario, y compararla con la que tenemos en la base de datos para ese mismo usuario.
Almacenar la clave encriptada nos acarrea una pequeña molestia, y es que si un usuario olvida su contraseña, deberemos proporcionarle una nueva, normalmente generada aleatoriamente. El proceso una vez generada es el mismo, la guardamos encriptada, y le mandamos un e-mail al usuario con la clave (no encriptada, claro), rogándole que la cambie cuanto antes por otra.
¿Nunca os habéis preguntado por qué muchos sitios web nos envían nuestra contraseña si la olvidamos? No tenemos ninguna garantía de que nadie más haya accedido a esa información, ni si internamente usan algún tipo de algoritmo de encriptación para almacenarla. Os animo a que desconfiéis de ese tipo de sitios.
Espero que os resulte de interés, y si tenéis cualquier aportación no dudéis en comentarlo ![]()






