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.
$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'];
}
}
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.
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;
}
}
}
y a través de la variable $login sabremos si esta logueado o no.

