Foros del Web » Programando para Internet » PHP »

Scrip Recuperar contraseña

Estas en el tema de Scrip Recuperar contraseña en el foro de PHP en Foros del Web. Buenos Dias mi duda es la siguiente, yo quiero un script para que el usuario pueda recuperar su contraseña, pero que cumpla los siguientes parametros: ...
  #1 (permalink)  
Antiguo 24/02/2014, 10:48
 
Fecha de Ingreso: marzo-2013
Mensajes: 52
Antigüedad: 11 años, 1 mes
Puntos: 0
Scrip Recuperar contraseña

Buenos Dias

mi duda es la siguiente, yo quiero un script para que el usuario pueda recuperar su contraseña, pero que cumpla los siguientes parametros:

1. El usuario entra en una vista donde se le solicita su email y que
llene un captchar (uso el de google)

2. Se validan los datos si los datos son correctos procede al paso 3
sino solo confirma el envió de correo (esto es para que un usuario no
intente usar varios correos buscando un resultado.

3. Este genera en una tabla aparte una contraseña y un keytoken y la
hora que se creo la contraseña. Se envía un correo con el KeyToken al
correo introducido.

4. El correo le indica al usuario que se solicito un cambio de
contraseña y para poder realizar el proceso debe validar el proceso
haciendo click en el vinculo que trae el correo.

5. Si hace click en el vinculo llega a una vista que el confirma que
se a validado el proceso y se le enviara la contraseña, dentro de la
validación se verifica la hora que es y la que se guardo en la base de
datos si ha pasado más de 24 hora envía un error que el token no es
valido.

6. Se envía un correo con la nueva contraseña y se actualiza la nueva
contraseña en la tabla de usuarios.


Actualmente estoy usando el siguiente script, pero no me gusta ya que cualquiera que conozca el correo del usuario puede cambiar su contraseña.

Código PHP:
<?php
    
include('acceso_db.php'); // incluímos los datos de acceso a la BD
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <?php
        
if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario
            
if(empty($_POST['usuario_nombre'])) {
                echo 
"No ha ingresado el usuario. <a href='javascript:history.back();'>Reintentar</a>";
            }else {
                
$usuario_nombre mysql_real_escape_string($_POST['usuario_nombre']);
                
$usuario_nombre trim($usuario_nombre);
                
$sql mysql_query("SELECT usuario_nombre, usuario_clave, usuario_email FROM usuarios WHERE usuario_nombre='".$usuario_nombre."'");
                if(
mysql_num_rows($sql)) {
                    
$row mysql_fetch_assoc($sql);
                    
$num_caracteres "10"// asignamos el número de caracteres que va a tener la nueva contraseña
                    
$nueva_clave substr(md5(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria
                    
$usuario_nombre $row['usuario_nombre'];
                    
$usuario_clave $nueva_clave// la nueva contraseña que se enviará por correo al usuario
                    
$usuario_clave2 md5($usuario_clave); // encriptamos la nueva contraseña para guardarla en la BD
                    
$usuario_email $row['usuario_email'];
                    
// actualizamos los datos (contraseña) del usuario que solicitó su contraseña
                    
mysql_query("UPDATE usuarios SET usuario_clave='".$usuario_clave2."' WHERE usuario_nombre='".$usuario_nombre."'");
                    
// Enviamos por email la nueva contraseña
                    
$remite_nombre ""// Tu nombre o el de tu página
                    
$remite_email ""// tu correo
                    
$asunto "Recuperación de contraseña"// Asunto (se puede cambiar)
                    
$mensaje "Se ha generado una nueva contraseña para el usuario <strong>".$usuario_nombre."</strong>. La nueva contraseña es: <strong>".$usuario_clave."</strong>.";
                    
$cabeceras "From: ".$remite_nombre." <".$remite_email.">\r\n";
                    
$cabeceras $cabeceras."Mime-Version: 1.0\n";
                    
$cabeceras $cabeceras."Content-Type: text/html";
                    
$enviar_email mail($usuario_email,$asunto,$mensaje,$cabeceras);
                    if(
$enviar_email) {
                        echo 
"La nueva contraseña ha sido enviada al email asociado al usuario ".$usuario_nombre.".";
                    }else {
                        echo 
"No se ha podido enviar el email. <a href='javascript:history.back();'>Reintentar</a>";
                    }
                }else {
                    echo 
"El usuario <strong>".$usuario_nombre."</strong> no está registrado. <a href='javascript:history.back();'>Reintentar</a>";
                }
            }
        }else {
    
?>
        <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
            <label>Usuario:</label><br />
            <input type="text" name="usuario_nombre" /><br />
            <input type="submit" name="enviar" value="Enviar" />
        </form>
    <?php
        
}
    
?> 
</body>
</html>
Gracias por su tiempo
  #2 (permalink)  
Antiguo 24/02/2014, 12:36
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Scrip Recuperar contraseña

Si lo estás haciendo con validación enviada por correo, no basta saber la dirección del usuario, tambien debe tener acceso a la cuenta de correo para hacer efectivo el cambio de contraseña; tal vez sólo necesitas otra validación para verificar que si ya hay un token y no ha caducado, evitar que se genere otra contraseña.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 24/02/2014, 22:33
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Scrip Recuperar contraseña

Creo que tu problema es que cambias la contraseña ni muy bien se solicita el cambio. Ahora si el cambio se produce al dar click en el enlace que se envia al correo, no veo como cualquier usuario puede cambiar la contraseña si no tiene la clave de la cuenta de email del usuario.

Tu debes hacer el cambio de contraseña sólo cuando el usuario haya aceptado el cambio de la misma desde el enlace de correo que le envias, si lo haces cuando pide el cambio en tu página, es decir antes de ser enviado el enlace, entonces si toda persona podría cambiar la contraseña de cualquier usuario en tu web y ya no tendría ninguna lógica enviar el enlace al correo pues la privacidad estaría burlada por tu mismo código.

Saludos
  #4 (permalink)  
Antiguo 03/03/2014, 07:37
 
Fecha de Ingreso: marzo-2013
Mensajes: 52
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Scrip Recuperar contraseña

Muchas gracias por las respuestas, precisamente por la seguridad quiero saber como crear un token , en el momento no tengo ese conocimiento...

Etiquetas: contraseña, formulario, html, mysql, scrip, select, sql, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:24.