Pregunta

es el almacenamiento de nombre de usuario & contraseña del usuario en una cookie una práctica buena? Realmente quiero saber cómo grandes sitios web como ( Facebook, Digg, Twitter ) manejar esto. Mi código es así:

<?php

$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);

?>

Después de cada inicio de sesión correcto i almacenar el $username y la $password (MD5) en una cookie. Y regenerar el id de sesión con session_regenerate_id()


Y para autenticar al usuario comprobar si existe una sesión de inicio de sesión, de lo contrario autentico las cookies.

Algunas ideas? Gracias

¿Fue útil?

Solución

Estoy un poco confundido - está usando sesiones PHP o las cookies

Si almacena los datos en una sesión ($_SESSION['username'] = 'Tom' etc.), que los datos no se almacenan en la cookie del usuario.

Si almacena los datos en una cookie separada (para algo así como la conexión automática), es posible que desee almacenar un ID diferente, al azar en su lugar, y buscar el identificador de usuario una tabla de base de datos.

autologins
----------
key (random hash)
user_id
expires

Otros consejos

Sólo un MD5 no es suficiente, al menos debe incluir una 'sal' al azar (una pequeña cadena aleatoria de caracteres) que almacena en su base de datos.

Edit: Por cierto, fue almacenada esta contraseña en texto plano o cifrado? Eso podría ser un mayor riesgo para la seguridad.

La práctica habitual es dar al usuario un ID de sesión en una cookie, ya sea por sí mismo o mediante sesiones de PHP. Almacenar el nombre de usuario y contraseña de hash en una cookie se sigue haciendo por algunos sitios, pero yo prefiero la primera. Se le permite dar a los usuarios un mayor control sobre sus datos de acceso, para que puedan ver cuántas sesiones que tienen y los que son de propiedad intelectual, por ejemplo -. GMail para ver un buen ejemplo

Sobre el tema de las sales y hash, debe almacenar los hashes de contraseñas en la base de datos con sal. Idealmente, la sal debe ser diferente para cada usuario. En el caso de que su base de datos es robado o se expone, esto hará que sea mucho más difícil para un atacante para obtener contraseñas (si todos ellos utilizan la misma sal que podrían generar tablas del arco iris para que la sal, que lleva mucho tiempo, pero dejaría a continuación, se rompen las contraseñas con bastante rapidez). Para mayor seguridad la sal también debe contener algunos caracteres no alfanuméricos, como% $ & ^.

Joel L's respuesta es una buena. La única cosa que me gustaría añadir es que en lugar de un ID aleatorio, se podría añadir alguna información adicional que identifica al usuario para que sea más seguro.

Por ejemplo, utilice un hash de la dirección IP del usuario y una sal, proporciona seguridad adicional contra alguien roba o aspirar cookie de seguridad del usuario.

Sospecho que Twitter utiliza algo como esto, por lo que sólo se puede estar conectado de forma permanente en Twitter desde un ordenador al mismo tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top