Login de usuario seguro en PHP

Después de leer un post en forosdelweb y de ver muchas veces que webs son “hackeadas” o “manipuladas” por el sistema de login de las webs, me propongo hacer un tutorial y explicación de como hacer un login seguro.

Primero, tenemos una tabla en nuestra base de datos llamada “usuarios” y contiene estos campos (id, usuario, password (codificada en md5) ). Ahora cuando se envía un formulario debemos obtener los datos y comprobar si existe, recordar que antes ya tiene que estar realizada la conexión con la base de datos.

[cc lang=”php”]

$usuario = mysql_real_escape_string($_POST[‘u’]);
$password = mysql_real_escape_string($_POST[‘p’]);

$consulta = mysql_query(“SELECT * FROM usuarios WHERE usuario='{$usuario}'”);
$row=mysql_fetch_array($consulta);

if(is_numeric($row[‘id’]) AND $row[‘id’]>0) {
$passactual=md5($row[‘password’]);
$passenviada=md5(md5($password));
if($passactual==$passenviada) {
$_SESSION[‘usuario’] = $row[‘id’].”_”.$row[‘password’];
}
}[/cc]

de esta forma, si los valores enviados en el formulario (usuario es u y la contraseña es p) son correctos, creara la sesión (deberás tener al inicio del documento, session_start();). Lo que hace el código es comprobar si existe el usuario en la base de datos (si row no existe, no sera numérico ni mayor que 0) y luego si las contraseñas son iguales (las pongo en md5 de nuevo, para evitar inyecciones etc).

En la sesión meto id_password, aun que yo suelo meter id_hash y en el hash codifico en md5 el password+correo+ip para así evitar robos de cookies etc. Ahora a comprobar es exactamente lo mismo.

[cc lang=”php”]
$login = false;
if(isset($_SESSION[‘usuario’]) AND !empty($_SESSION[‘usuario’])) {
$d = explode(“_”, $_SESSION[‘usuario’]);
$id = intval($d[0]);
if($id>0) {
$consulta = mysql_query(“SELECT * FROM usuarios WHERE id='{$id}'”);
$row=mysql_fetch_arrray($consulta);
$passactual=md5($row[‘password’]);
$passenviada=md5($d[1]);
if($passactual==$passenviada) {
$login=true;
}
}
}[/cc]

y a través de la variable $login sabremos si esta logueado o no.

11 comentarios en “Login de usuario seguro en PHP

  1. Muy buen aporte, esto me sera muy necesario para cuando desea pasar mi blog de wp.com a wp.org. Por el momento lo guardare en mi barra de marcadores para cuando necesite esta útil información.

    PD: Suerte con este blog y el experimento de los 10 dolares xD.

  2. Buen aporte Wsoul,

    Yo suelo enviar a la base de datos los 2 parametros (id y passwd), de forma y manera que sea la bd quien haga la comprobación.

    Luego, si hay registros, pues ok, si no, pues no.

    Saludos.

  3. Esto siempre ha sido uno de mis temas pendientes, ya que el que siempre he intentado (tomando los datos del foro) siempre me ha fallado por alguna parte T.T

  4. Se ve bueno, estoy aprendiendo php gracias a un amigo(que me ayuda a inciar por que nunca se me dio bien php xD) y bueno, espero que me sirva en un futuro.
    Gracias!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *