Ver Mensaje Individual
  #14 (permalink)  
Antiguo 12/11/2017, 12:34
chivacker
 
Fecha de Ingreso: septiembre-2013
Ubicación: Madrid
Mensajes: 59
Antigüedad: 11 años, 1 mes
Puntos: 6
Respuesta: Acceso con Hash

Hola,
Primero tienes que saber 2 cosas sobre hash:
- No es reversible (en teoría)
- Los hash actuales no tienen el mismo valor sobre la misma entrada. Es decir, password_hash('1234', PASSWORD_BCRYPT) cada vez que lo ejecutes te va a dar un resultado diferente. No es como SHA.

Una vez comprendido eso el siguiente paso es entender el flujo de verificación de hash:
- Un usuario al registrarse te da una contraseña en texto plano
- Sobre esta contraseña aplicas algoritmo de hash que es el que guardas en BBDD asociado a su usuario
- Cuando el usuario hace login te da su nombre de usuario que es el que consultas sobre la BBDD
- Si el usuario existe tendrás el valor de su hash de contraseña.
- Verificas que el texto plano que te ha pasado sea equivalente al hash que tienes en BBDD
- Si es equivalente todo ok. Si no pues la contraseña está mal.

¿Cómo quedaría el código?

Código PHP:
Ver original
  1. <?php
  2. ?>
  3. <?php
  4. require_once("conexion.php");
  5. ?>
  6. <?php
  7. $contador=0;
  8. if(isset($_SESSION["session_username"])){
  9.     // echo "Session is set"; // for testing purposes
  10.     header("Location: index.php");
  11. }
  12.  
  13. if(isset($_POST["login"])){
  14.     if(!empty($_POST['username']) && !empty($_POST['password'])) {
  15.  
  16.         $username=$_POST['username'];
  17.         $password=$_POST['password'];
  18.  
  19.         $query = mysql_query("SELECT * FROM loggeous WHERE '" . $username . "' = username LIMIT 1");
  20.  
  21.         $numrows = mysql_num_rows($query);
  22.         if($numrows != 0)
  23.         {
  24.             $row = mysql_fetch_assoc($query);
  25.             {
  26.                 $dbusername=$row['username'];
  27.                 $dbpassword=$row['password'];
  28.                 $dbnombre = $row['nombre'];
  29.                 $id = $row['cod_us'];
  30.                 $correo = $row['email'];
  31.                 $telefono = $row['celphone'];
  32.                 $tipo_usuario = $row['tipo_usuario'];
  33.                 $foto = $row['img_profile'];
  34.             }
  35.  
  36.             if(password_verify($password, $dbpassword))
  37.             {
  38.                 $_SESSION['session_username']=$username;
  39.                 $_SESSION['nombre_usuario'] = $dbnombre;
  40.                 $_SESSION['cod_us'] = $id;
  41.                 $_SESSION['email'] = $correo;
  42.                 $_SESSION['celphone'] = $telefono;
  43.                 $_SESSION['tipo_usuario'] = $tipo_usuario;
  44.                 $_SESSION['password'] = $password;
  45.                 $_SESSION['img_profile'] = $foto;
  46.                 /* Redirect browser */
  47.                 header("Location: index.php");
  48.             }else{
  49.                 $message = "La contraseña está mal";
  50.             }
  51.         } else {
  52.             $message = "El usuario no existe!";
  53.         }
  54.  
  55.     } else {
  56.         $message = "Todos los campos son requeridos!";
  57.     }
  58.  
  59. }
  60. ?>

Aún así tienes mucho código por mejorar pero eso te lo dará la experiencia.

Suerte con tu aplicación,
Un abrazo