Ver Mensaje Individual
  #8 (permalink)  
Antiguo 23/02/2010, 02:53
Avatar de genuine_carlosV2
genuine_carlosV2
 
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: [APORTE] Sistema de Sesiones y Autentificación de usuario con MySQL

Buenas,

No he llegado a implementarlo pero me lo he mirado por encima. Si me permites, te haré una sugerencia:
No cifres los passwords, eso es un fallo de seguridad en tu web. Si por lo que sea, alguien lograse acceder a tu BD, haciendo la operación inversa obtendría los passwords (das la contraseña) de todos tus usuarios (incluyendo, si existen, administradores). Además, si no dieses la contraseña, alguien con mala leche, también podría sacarla por fuerza bruta (nunca creas que a ti no te va a pasar porque la gente se aburre mucho). Finalmente, desde un punto de vista moral y de confianza a tus usuarios, tu no deberías saber los passwords de éstos ya que eres el administrador de la web y, por tanto, ya tienes acceso a lo que quieras, saber los passwords de la gente te puede dar acceso a otros sitios web/ordenadores donde hayan puesto el mismo password (si, fallo de los usuarios, pero dime, seguro que tienes passwords distintos para TODO? si la respuesta es si, enhorabuena, eres de los pocos que le importan sus datos. En caso contrario, piensa que si a tu ya pones varias contraseñas iguales, imagínate la gente que no le gusta o no tiene curiosidad por la informática).

Que deberías hacer para solucionar esto? Usa un sistema de una sola dirección como, por ejemplo, los HASH. Basa tu sistema de passwords en MD5. Por ejemplo:
Si mi password fuese 'Nisrokh', guarda en tu base de datos 'a2aa89f25ae1392526ebf99e1e6bed01' de modo que no hay forma de saber si esa cadena proviene de 'Nisrokh' o de vete tu a saber donde.
Para verificar que un password sea correcto, tan solo haz:
Código PHP:
if( md5$campo_formulario ) == $password_guardado ) {
echo 
'Aplicar un mismo hash dos veces a un mismo texto da el mismo resultado';
} else {
echo 
'Si los hashes no son iguales, significa que no provienen del mismo texto';

Si alguien pierde su password, tienes que verificar sus datos como sea y solicitarle un nuevo password o poner un password predefinido como md5( 'predefinido' ) o, incluso, una cadena aleatoria que ya le enviarás vía e-mail o como sea.

Finalmente, quiero hacer una reflexión sobre los sitios web en general y este tema. NUNCA y repito, NUNCA te fíes de una web en la cual, si te olvidas tu password, sean capaces de devolvertelo porque eso significa que ellos SABEN cual es tu password (no son correctos moralmente hablando) y, por tanto, si sufren un ataque, el atacante tiene una posibilidad de saber también tu password (no son correctos hablando de seguridad). De quien te puedes fiar pues? Pues de todas esas webs que, si olvidas tu password, te dan un período de X días para que introduzcas un password nuevo o cosas así.

P.D.: Según la actual ley española, revelar datos de una BD está castigado para el programador con 30.000 € por cada dato. Si uno entra en tu web y coge los passwords de 100 personas que tengas registradas, multiplica...

Saludos
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM