PHP - Sistema de recuperación de contraseña

 
Vista:
sin imagen de perfil
Val: 15
Ha aumentado su posición en 13 puestos en PHP (en relación al último mes)
Gráfica de PHP

Sistema de recuperación de contraseña

Publicado por Ivan (8 intervenciones) el 26/09/2018 19:36:21
Hola chicos, estoy haciendo un sistema de recuperación de contraseña. Cogí una idea de un chico de youtube a la hora de hacer la seguridad para que si alguien cambia el token o el usuario, no se viese el input, el problema es que desde primeras no se ve.

El correo lo manda, genera el token, y la URL, pero creo que no valida la URL con el usuario y el token, os dejo el código en sí.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<?php
    if(isset($_GET['email']) AND isset($_GET['token'])){
    require "conexion.php";
    $email = $mysqli->real_escape_string($_GET['email']);
    $token = $mysqli->real_escape_string($_GET['token']);
    $sql = $mysqli->query("SELECT token FROM usuarios WHERE email = '$email'");
    $row = $sql->fetch_array();
 
    if($row['token'] == $token) {
 
?>
<?php
if(isset($_POST['codigo'])){
    require "conexion.php";
    $pass = $mysqli->real_escape_string($_POST['pass']);
    $pass = hash('sha512',$pass);
 
    $act = $mysqli->query("UPDATE usuarios SET pass= '$pass', token = '' WHERE email = '$email'");
 
    if ($act){
        echo "Su contraseña se ha actualizado correctamente";
        header("Refresh: 1; URL=../index.php");
    }else{
        echo "Ha habido un problema a la hora de actualizar la contraseña";
    }
}
?>
 
<form action="" method="post">
<input type="text" placeholder="Ingrese su nueva contraseña" name="pass" required/>
<input type="submit" value="Cambiar contraseña" name="codigo"/>
</form>
</body>
    <?php  } } ?>
</html>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Sistema de recuperación de contraseña

Publicado por xve (6935 intervenciones) el 27/09/2018 08:18:14
Hola Ivan, cuesta un poco de ver tu código, ya que esta mal tabulado... tienes cosas que se podrian mejorar, por ejemplo, haces dos veces:
1
require "conexion.php";
y el final del </body> esta dentro de una condición.
Lo parámetros, te recomiendo no pasarlos por GET, sino por POST.

Aparte de esto, en la linea 18 si que compruebas el token que recibes con el que esta en la base de datos, no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha aumentado su posición en 13 puestos en PHP (en relación al último mes)
Gráfica de PHP

Sistema de recuperación de contraseña

Publicado por Ivan (8 intervenciones) el 27/09/2018 09:09:48
Buenas, gracias por contestar, meto el body dentro de la condicion a modo de seguridad para que si cambian algun numero de token o usuario, no le aparezca el input para updatear, no se si estara bien asi.

Lo segundo, lo que prentedo que haga es que valide tanto el email y el token de la url con el de la base de datos para que aparezca ese input, pero no sale, asi que supongo que no lo esta validando bien o que le falte algo para que eda validacion sea posible.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Sistema de recuperación de contraseña

Publicado por xve (6935 intervenciones) el 27/09/2018 14:56:21
No se que estructura tiene tu base de datos, pero en tu consulta SQL solo comparas el correo, no buscas el token...

Lo tienes así:
1
$sql = $mysqli->query("SELECT token FROM usuarios WHERE email = '$email'");
y tendría que ser algo así, no?
1
$sql = $mysqli->query("SELECT token FROM usuarios WHERE email = '$email' AND token='$token'");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha aumentado su posición en 13 puestos en PHP (en relación al último mes)
Gráfica de PHP

Sistema de recuperación de contraseña

Publicado por Ivan (8 intervenciones) el 27/09/2018 17:15:14
Lo hice a partir de este video,
, el código es identico cambiando parametros de user y demas , a el le funciona pero a mi no..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar