elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Hash y control de usuario
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Hash y control de usuario  (Leído 2,790 veces)
oscarcaronte

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Hash y control de usuario
« en: 1 Mayo 2020, 18:01 pm »

Hola,

Hace mucho tiempo que no programaba (y estoy recuperando códigos hechos con mysql, que debo pasar a mysqli.

También veo que la cifrado md5 ya no es la más segura y estoy intentando pasar a un hash diferente.

La cuestión es en el archivo que yo llamaba validar.php


Utilizaba la expresión   
Código
  1. $pw_enc = md5($pw);
 

Y ahora quisiera en ese código utilizar

Código
  1. $pw_enc =password_hash($pw, PASSWORD_DEFAULT, array("cost"=>12));
  2.  


Pero tal y como está parece que ya no valdría el código (sé que hay que transformarlo a mysqli pero me refiero a que por lo que leo habría que añadir en algún punto un password_verify para que cotejara que son el mismo, ¿cómo podría hacerse esto? ¿es necesario el password verify? Y si es así, me podríais ayudar a saber dónde?


validar.php


Código
  1. <?php
  2.  
  3.  
  4.    //conectar BD
  5.    include("conectar_bd.php");  
  6.    conectar_bd();
  7.  
  8.    $usr = $_POST['usuario'];
  9.    $pw = $_POST['password'];
  10.    //Obtengo la version cifrada del password
  11.    $pw_enc = md5($pw);
  12.  
  13.  
  14.  
  15.  
  16.    $result=$conexio->query("SELECT id_usuario FROM tbl_users
  17.            INNER JOIN ctg_tiposusuario
  18.            ON tbl_users.id_TipoUsuario = ctg_tiposusuario.id_TipoUsuario
  19.            WHERE tx_username = '".$usr."'
  20.            AND tx_password = '".$pw_enc."' ");
  21.  
  22.    $uid = "";
  23.  
  24.    //Si existe al menos una fila
  25.    if( $fila=$result->fetch_array(MYSQLI_ASSOC))
  26.    {      
  27.        //Obtener el Id del usuario en la BD        
  28.        $uid = $fila['id_usuario'];
  29.        //Iniciar una sesion de PHP
  30.        session_start();
  31.        //Crear una variable para indicar que se ha autenticado
  32.        $_SESSION['autenticado'] = 'SI';
  33.        //Crear una variable para guardar el ID del usuario para tenerlo siempre disponible
  34.        $_SESSION['uid'] = $uid;
  35.        //CODIGO DE SESION
  36.  
  37.        //Crear un formulario para redireccionar al usuario y enviar oculto su Id
  38. ?>
  39.        <form name="formulario" method="post" action="principalcero.php">
  40.            <input type="hidden" name="idUsr" value='<?php echo $uid ?>' />
  41.        </form>
  42. <?php
  43.    }
  44.    else {
  45.        //En caso de que no exista una fila...
  46.        //..Crear un formulario para redireccionar al usuario a la pagina de login
  47.        //enviandole un codigo de error
  48. ?>
  49.        <form name="formulario" method="post" action="index.php">
  50.            <input type="hidden" name="msg_error" value="1">
  51.        </form>
  52. <?php
  53.    }
  54. ?>
  55.  
  56. <script type="text/javascript">
  57.    //Redireccionar con el formulario creado
  58.    document.formulario.submit();
  59. </script>
  60.  
  61.  
  62.  
  63.  
  64.  


En línea

oscarcaronte

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Hash y control de usuario
« Respuesta #1 en: 1 Mayo 2020, 20:47 pm »

Sé que se os revuelve el estómago con el código, que es además un refrito de otros, pero si me pudiérais ayudar sería genial.

Millones de gracias.


En línea

MetaNoia

Desconectado Desconectado

Mensajes: 33



Ver Perfil WWW
Re: Hash y control de usuario
« Respuesta #2 en: 4 Mayo 2020, 19:57 pm »

Buenas, veo varias cosas que se pueden mejorar en tu código:

1. Siempre que quieras redirigir a una determinada pagina puedes usar la función 'header' de php para mandar determinadas cabeceras, en este caso concreto puedes usar la cabecera 'Location' seguida del fichero a donde lo quieras redirigir.Por ejemplo:
Código
  1. header('Location: index.php');'

2. Y por ultimo para acceder a los datos del array '$_SESSION' en vez de pasárselo en formularios con parámetros ocultos solo debes poner 'session_start()' en todos los ficheros php que vas a necesitar tales datos, de esta forma podrás acceder a los datos del array sin problema.
Por ejemplo, en el index.php puedes poner session_start() al inicio del fichero y acceder al uid del usuario de forma normal, $_SESSION['uid']

3.Con lo que preguntas de comprobar las contraseñas es cifrar la contraseña que ha metido el usuario en el formulario y comprobar si su hash correspondiente es valido con el hash de la contraseña en la base de datos.
Código
  1. <?php
  2. $hash = password_hash($pw, PASSWORD_DEFAULT, array("cost"=>12));
  3. $isOk = password_verify($passUserBD, $hash);


Al código te faltaría meterle mas consultas sql pero te he ordenado lo de redirigir a los usuarios.
Código
  1. <?php
  2.    //conectar BD
  3.    include("conectar_bd.php");
  4.    conectar_bd();
  5.  
  6.    $usr = $_POST['usuario'];
  7.    $pw = $_POST['password'];
  8.    //Obtengo la version cifrada del password
  9.    $pw_enc =password_hash($pw, PASSWORD_DEFAULT, array("cost"=>12));
  10.  
  11.    $result=$conexio->query("SELECT id_usuario FROM tbl_users
  12.            INNER JOIN ctg_tiposusuario
  13.            ON tbl_users.id_TipoUsuario = ctg_tiposusuario.id_TipoUsuario
  14.            WHERE tx_username = '".$usr."'
  15.            AND tx_password = '".$pw_enc."' ");
  16.  
  17.    $uid = "";
  18.  
  19.    //Si existe al menos una fila
  20.    if( $fila=$result->fetch_array(MYSQLI_ASSOC))
  21.    {
  22.        //Obtener el Id del usuario en la BD
  23.        $uid = $fila['id_usuario'];
  24.        //Iniciar una sesion de PHP
  25.        session_start();
  26.        //Crear una variable para indicar que se ha autenticado
  27.        $_SESSION['autenticado'] = 'SI';
  28.        //Crear una variable para guardar el ID del usuario para tenerlo siempre disponible
  29.        $_SESSION['uid'] = $uid;
  30.        //CODIGO DE SESION
  31.        header('Location: principalcero.php');
  32.    }
  33.    else
  34.    {
  35.        //En caso de que no exista una fila...
  36.        header('Location: index.php');
  37.    }
  38.  

Un saludo
En línea

Código:
<?php
       header("Location: TheHackerWay");
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Lista en control de usuario
Programación Visual Basic
SheKeL_C$ 2 1,855 Último mensaje 23 Marzo 2011, 04:56 am
por seba123neo
añadir controles a un Control de Usuario
.NET (C#, VB.NET, ASP)
David Vans 1 2,179 Último mensaje 2 Enero 2008, 12:49 pm
por [D4N93R]
Socket en control de Usuario ?
Programación Visual Basic
Tengu 0 1,420 Último mensaje 26 Junio 2010, 21:15 pm
por Tengu
Control de servicios y programas para cada usuario
Windows
3n31ch 8 10,798 Último mensaje 18 Mayo 2015, 15:08 pm
por 3n31ch
¿Qué hacer si han tomado el control de tu ordenador o tus cuentas de usuario?
Noticias
wolfbcn 0 963 Último mensaje 14 Diciembre 2015, 14:23 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines