Foros del Web » Programando para Internet » PHP »

Como recuperar password en sistema que gestiona cuentas de usuarios

Estas en el tema de Como recuperar password en sistema que gestiona cuentas de usuarios en el foro de PHP en Foros del Web. 1 - parece bueno pero haber yo no pondria los controles en la url cualquiera puede modificarlo y ir probando cosas raras con tus controladores ...

  #31 (permalink)  
Antiguo 14/12/2012, 12:07
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

1 - parece bueno pero haber yo no pondria los controles en la url cualquiera puede modificarlo y ir probando cosas raras con tus controladores en tu web , nunca confies en los usuarios.

2 - si un formulario con 2 campos contraseña y repetir contraseña , si despues muestras al user que todo fue satisfactorio y que ya puede acceder con su nueva contraseña y muestras el login , que no entre directamente.
  #32 (permalink)  
Antiguo 14/12/2012, 15:36
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

webankenovi gracias por responder


Cita:
1 - parece bueno pero haber yo no pondria los controles en la url cualquiera puede modificarlo y ir probando cosas raras con tus controladores en tu web , nunca confies en los usuarios.
esta es mi tabla usuarios , en esta guardo el usuario (ussuario ) y la contraseña (usu_clave) en crypt (que tu me lo recomendaste),
Código SQL:
Ver original
  1. CREATE TABLE usuarios
  2. (
  3.   id_usuarios INTEGER NOT NULL DEFAULT NEXTVAL('usuarios_id_usuario_seq'::regclass),
  4.   nom_usuario CHARACTER VARYING(64),
  5.   nom_apellido CHARACTER VARYING(64),
  6.   usu_usuario CHARACTER VARYING(32),
  7.   usu_clave CHARACTER VARYING(32),
  8.   usu_telefono1 CHARACTER VARYING(100),
  9.   usu_telefono2 CHARACTER VARYING(100),
  10.   usu_correo CHARACTER VARYING(60),
  11.   usu_estado INTEGER,
  12.   perfil INTEGER,
  13.   CONSTRAINT usuarios_pkey PRIMARY KEY (id_usuarios)
  14. )

entonces que me recomiendas ?
yo l orealizaria asi: se recibe un correo si este se encuentra en la base de datos envia el link con time(), pero que envio para saber cual es usuario?

Última edición por Montes28; 14/12/2012 a las 16:35
  #33 (permalink)  
Antiguo 14/12/2012, 17:01
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

Yo haria lo siguiente:

1 - El usuario introduce el email para que se le envie la contraseña
2 - Enviamos un email con los campos time y el email del usuario , no la pass aun y te explico por que , imaginate que un usuario introduce emails por aburrimiento y entonces se van a cambiar contraseñas de usuarios que no lo han solicitado ,para que no suceda eso el campo de la contraseña no lo tocamos aun , entonces quedaria todo tal cual estaba sin cambiar nada, entonces solo enviamos time y el email en el link , y especificamos al usuario que si el no ha solicitado la recuperacion de su cuenta borre el email y se olvide de el tema y si es cierto que lo ha pedido que puse en el link
3 - el usuario hace clik en el link y llega a la pagina donde vamos a verificar el campo time para la caducidad si esta bien el email donde se va a realizar los cambios y un formulario para asignar la nueva contraseña y si esta bien le decimos que todo este correcto y que se loguee .

otra opcion es la siguiente:

2- enviamos un email con el pass aleatorio pero asi , sin link solo enviamos el pass en texto plano

usuario: tal tal
emial: tal tal
password nuevo : 768hg87g8b7

3- modificamos el pass anterior por el nuevo en la bd y que el usuario ya se loguee cuando quiera y dentro en el perfil una opcion para modificar su contraseña por una nueva despues de loguearse la primera vez e incluso puedes poner caducidad a la pass nueva y si no se loguea despues de x tiempo deberia volver a pedir otra pass
  #34 (permalink)  
Antiguo 14/12/2012, 17:13
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

en respuestas anteriores me indicaste usar el hash (crypt) y un token y me acabas de recomendar otra cosa me confundi un poco , necesito lo que sea mas seguro y que sea de una manera elegante y funcional.

Cita:
un formulario me parece mejor y una caducidad al link que envias por email

y antes de enviar el email un formulario donde el usuario introduzca el nombre de usuario y el email y si coinciden se envia si ha olvidado el usuario y por consiguiente no coinciden ¡ un form donde ponga el email y se envia el usuario

en el momento que coinciden se envia el email y se guarda la clave aleatoria en la bd para despues verificar , tambien se deberia guardar la hora de el envio y pasarlo tambien en el link , una vez el user haga clik en el link del email se verifica la hora y si pasa mas de 3 horas por ejemplo se le dice que vuelvo a pedir otro email que ese caduco si esta bien la hora se comprueba la pass del link con la pass de la bd y si esta bien muestras el form para que ponga su nueva contraseña

Cita:
como no vas a dar la opcion de recuperar la contraseña antigua podemos usar un hash de una sola via de un sentido sin vuelta

te recomiendo : crypt en lugar de md5 muy inseguro

http://es.php.net/manual/es/function.crypt.php

una cosa que ami personalmente me gusta es poner una tabla con los campos user y pass , el pass hasheado con crypt y el usuario igualmente , y te preguntaras como muestro el usuario entonces ¿? otra tabla con los datos del usuario ,en el momento del registro guardamos el user hasheado en la tabla de login por ejemplo y el pass , el user sin hashear en la tabla de los datos

a tus preguntas:

obvia lo de guardar la hora en la bd (no es necesario)

en el momento de envio del email se manda en el link para su posterior comprobacion el time() justo en el momento del envio con time()

una vez el user haga clik en el link se envia a una pagina donde deberas verificar que el campo time no ha superado el tiempo que tu creas conveniente como para caducar

link

verify_account.php?pass=nvujnervnruineinrveriegnre oivns&time=time()

en el momento del clik

verificamos si existe pass y time

y ya verificamos la caducidad

Código PHP:

Ver originalCopiar

if($_GET['time'] )

$controlador = 3600; //sg 1 HORA DE CADUCIDAD
$controlador_final = $_GET['time'] + $controlador ;
$time_actual= time();

if($controlador_final >= $time_actual)
{

ahora verificamos el password con el de la bd

}else{

echo 'link caducado';

}





ademas de todo esto pondria una capa de seguridad extra con un token , ninguna medida esta de mas
  #35 (permalink)  
Antiguo 14/12/2012, 17:20
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

si es verdad lo mismo te he mareado , pero claro pense en que si un usuario por error introduce un email que no es el suyo y por casualidad existe en la bd o simplemente lo hace aposta , la mejor manera para mi es la opcion 1 que te dije ahora , tu deberias hacerlo de la manera que tu mejor creas cualquiera de las 3 que hemos hablado son validas , si quieres seguir como estabas tan solo usa el campo del email para saber que usuario es y pasalo en el link

y eso si siempre un token que garantize que el usuario proviene del link

ya que si no solamente poniendo en la url , el time actual digamos y un email con el controller y la accion que pusiste en la url podriamos acceder directamente al cambio de contraseña y quebrar la seguridad , por eso ya te dije que no es una buena practica pasar de esa manera el controlador y la accion, un usuario con conocimiento puede saltar tu seguridad muy rapido tan solo siguiendo los parametros de la url

Última edición por webankenovi; 14/12/2012 a las 17:54
  #36 (permalink)  
Antiguo 14/12/2012, 20:34
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

webankenovi gracias por responder , te voy a describir lo que voy a hacer y me dices si estoy haceindo lo correcto

en el login.php
Código HTML:
Ver original
  1. <a href="index.php?controller=user_&accion=recuperar_contrasena">Olvide mi Contraseña</a>


en la accion recuperar_contrasena se envia el correo con el link


este es el link que estoy enviando al correo electronico esta bien? o deberia ser una cadena que el usuario no entienda
Código PHP:
Ver original
  1. $mail->MsgHTML("<a href='http://localhost/volcanicos/views/frm_mod_cont.php?time=".time()."&id=".$hash."'>".Recuperar.Contraseña."</a>");

tengo un inconveniente se supone que el controller debe de realizar el proceso de obtener el time comparlo y .....
en el controller tengo una funcion para cada tarea del sitio.
y donde implemento el
Cita:
y eso si siempre un token que garantize que el usuario proviene del link
he estado intentando implementarlo pero me causa un poco de dificultad


en frm_mod_cont.php tengo
Código PHP:
Ver original
  1. <?php
  2.        
  3.         if($_GET['time'] )
  4. * * *
  5. * * $controlador = 3600; //sg *1 HORA DE CADUCIDAD *
  6. * * $controlador_final = $_GET['time'] + $controlador ;
  7. * * $time_actual= time();
  8. * * *
  9. * * if($controlador_final >= $time_actual)
  10. * * {
  11. * * *
  12. * * *
  13. * * }else{
  14. * * *
  15. * * echo 'link caducado';
  16. * * *
  17. * * }
  18.        
  19.         ?>

pero en frm_mod_cont.php debe de ser la vista no deberia tener tanto codigo php

Última edición por Montes28; 14/12/2012 a las 22:42
  #37 (permalink)  
Antiguo 16/12/2012, 11:33
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

OK haber por un lado tenemos el link para recuperar la pass

Código PHP:
Ver original
  1. <a href="index.php?controller=user_&accion=recuperar_contrasena">Olvide mi Contraseña</a>

que llama a esta funcion

Código PHP:
Ver original
  1. function recuperar_contrasena()
  2. {
  3.            
  4.      
  5.            $ok = false;
  6.  
  7.             if(isset($_POST['destinatario']))
  8.            {
  9.  
  10.              require 'views/envio.php';
  11.              $ok = true;
  12.  
  13.             }
  14.      
  15.             if($ok==true) {
  16.      
  17.             include('views/confirmacion.php');
  18.  
  19.            } else {
  20.  
  21.            //require 'views/frm_recuperar_contasena.php';
  22.            include('views/frm_recuperar_contasena.php');
  23.  
  24.            }
  25.  }

por otro lado envio.php

Código PHP:
Ver original
  1. <php
  2.      
  3.     ini_set ('error_reporting',-1);
  4.      
  5.     $destinatario_form = $_POST['destinatario'];
  6.     $usuario = 'postgres';
  7.     $contrasenia = '*****';
  8.        
  9.                 try {
  10.      
  11.                     $db = new PDO('pgsql:host=192.168.102.200;dbname=volcanoes',$usuario,$contrasenia);
  12.                     }catch(PDOException $e) {
  13.                     echo "Usuario y Clave Invalidas";
  14.                     throw new Exception("Usuario y Clave Invalidas", 0, $e);
  15.                     }
  16.      
  17.      
  18.     $consulta = $db->prepare("SELECT * FROM usuarios WHERE usu_correo ='$destinatario_form'");
  19.     $consulta->execute();
  20.      
  21.     while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  22.         {
  23.             $hash=$fila['usu_clave'];
  24.         }
  25.      
  26.      
  27.     require_once('phpMailer/class.phpmailer.php');
  28.     require_once("phpMailer/class.smtp.php");
  29.      
  30.     $consulta->execute();
  31.     $cuenta = $consulta->rowCount();
  32.     if($cuenta == 1){
  33.      
  34.     while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  35.         {
  36.            
  37.             $hash=$fila['usu_clave'];
  38.             $destinatario=$fila['usu_correo'];
  39.      
  40.         }
  41.     require_once('phpMailer/class.phpmailer.php');
  42.     require_once("phpMailer/class.smtp.php");
  43.      
  44.      
  45.      
  46.     $mail = new PHPMailer(true);
  47.     $mail->IsSMTP();
  48.     $mail->Host       = '172.25.1.3';
  49.     $mail->SMTPDebug  = 0;                
  50.     $mail->SMTPAuth   = false;
  51.     $mail->SMTPSecure = 'SSL';
  52.     $mail->Port       = 25;                  
  53.     $mail->Subject = "Asunto del correo";
  54.     $mail->AddAddress($destinatario);
  55.     $mail->SetFrom('[email protected]','Fenomenos Volcanicos');
  56.     $mail->Subject = 'Recuperacion Contraseña';
  57.     $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';
  58.     $mail->MsgHTML("<a href='http://192.168.102.9/volcanicos&time=".time()."&id=".$hash."'>".Recuperar.Contraseña."</a>"."<br>".$hash);
  59.      
  60.     if( ! $mail->Send())
  61.     {
  62.         $validate = 1;
  63.     }
  64.     else
  65.     {
  66.         $validate =  2;
  67.     }
  68.      
  69.     }
  70.     else
  71.     {
  72.         $validate = 0;
  73.     }
  74.      
  75.     ?>

por otro lado confirmacion.php

Código PHP:
Ver original
  1. <?php
  2.        
  3.     ini_set ('error_reporting', -1);
  4.      
  5.     switch($validate)
  6.     {
  7.         case 0:
  8.         echo 'El correo '.$destinatario_form.'<br>No esta Asociado a ningun usuario del Sistema';
  9.         break;
  10.      
  11.         case 1:
  12.         echo 'Se produjo un error en el envio del email , pruebe a intentarlo otra vez';
  13.         break;
  14.      
  15.         case 2:
  16.         echo 'Email enviado correctamente';
  17.         break;
  18.      
  19.         default :
  20.         echo 'se produjo en error';
  21.     }
  22.      
  23.     ?>


centremonos en esta linea

Código PHP:
Ver original
  1. $mail->MsgHTML("<a href='http://192.168.102.9/volcanicos&time=".time()."&id=".$hash."'>".Recuperar.Contraseña."</a>"."<br>".$hash);

time= time(); // controlamos el tiempo para la caducidad del link
token = sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.rand()); // controlador para verificar
destinatario = $destinatario; // para verificar que usuario es

quedaria asi

Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://192.168.102.9/volcanicos&time='.base64_encode(time()).'&us='.base64_encode($destinatario).'&do='.sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.rand()).' ">Recuperar.Contraseña</a><br>');

ahora con todo esto ya tienes el link preparado

envio.php ahora quedari asi
Código PHP:
Ver original
  1. <php
  2.          
  3.         ini_set ('error_reporting',-1);
  4.          
  5.         $destinatario_form = $_POST['destinatario'];
  6.         $usuario = 'postgres';
  7.         $contrasenia = '*****';
  8.            
  9.                     try {
  10.          
  11.                         $db = new PDO('pgsql:host=192.168.102.200;dbname=volcanoes',$usuario,$contrasenia);
  12.                         }catch(PDOException $e) {
  13.                         echo "Usuario y Clave Invalidas";
  14.                         throw new Exception("Usuario y Clave Invalidas", 0, $e);
  15.                         }
  16.          
  17.          
  18.         $consulta = $db->prepare("SELECT * FROM usuarios WHERE usu_correo ='$destinatario_form'");
  19.         $consulta->execute();
  20.          
  21.         while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  22.             {
  23.                 $hash=$fila['usu_clave'];
  24.             }
  25.          
  26.          
  27.         require_once('phpMailer/class.phpmailer.php');
  28.         require_once("phpMailer/class.smtp.php");
  29.          
  30.         $consulta->execute();
  31.         $cuenta = $consulta->rowCount();
  32.         if($cuenta == 1){
  33.          
  34.         while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  35.             {
  36.                
  37.                 $hash=$fila['usu_clave'];
  38.                 $destinatario=$fila['usu_correo'];
  39.          
  40.             }
  41.         require_once('phpMailer/class.phpmailer.php');
  42.         require_once("phpMailer/class.smtp.php");
  43.          
  44. $do = sha1($_SERVER['HTTP_USER_AGENT'].$destinatario);
  45.          
  46.         $mail = new PHPMailer(true);
  47.         $mail->IsSMTP();
  48.         $mail->Host       = '172.25.1.3';
  49.         $mail->SMTPDebug  = 0;                
  50.         $mail->SMTPAuth   = false;
  51.         $mail->SMTPSecure = 'SSL';
  52.         $mail->Port       = 25;                  
  53.         $mail->Subject = "Asunto del correo";
  54.         $mail->AddAddress($destinatario);
  55.         $mail->SetFrom('[email protected]','Fenomenos Volcanicos');
  56.         $mail->Subject = 'Recuperacion Contraseña';
  57.         $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';
  58.         $mail->MsgHTML('<a href="http://192.168.102.9/volcanicos&ti='.base64_encode(time()).'&de='.base64_encode($destinatario).'&do='.$do.' ">Recuperar.Contraseña</a><br>');
  59.          
  60.         if( ! $mail->Send())
  61.         {
  62.             $validate = 1;
  63.         }
  64.         else
  65.         {
  66.             $validate =  2;
  67.         }
  68.          
  69.         }
  70.         else
  71.         {
  72.             $validate = 0;
  73.         }  
  74.  ?>

Última edición por webankenovi; 16/12/2012 a las 11:51
  #38 (permalink)  
Antiguo 16/12/2012, 11:57
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

ya te conteste en el otro post como hacer lo de la url el token y el dato para saber cual es el usuario

la url quedari asi , antes me equivoque solo en el archivo

Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&ti='.base64_encode(time()).'&de='.base64_encode($destinatario).'&do='.$do.' ">Recuperar.Contraseña</a><br>');

ahora nos ponemos con el frm_mod_cont.php

Código PHP:
Ver original
  1. <?php
  2.          
  3. /// primero verificamos que existen las variables
  4.  
  5. if($_GET['ti'] and $_GET['de'] and $_GET['do'])
  6. {
  7.    
  8.     $controlador = 3600; //sg *1 HORA DE CADUCIDAD *
  9.     $controlador_final = base64_decode($_GET['ti']) + $controlador ;
  10.     $time_actual= time();
  11.    
  12.  
  13.     // verificacion de la caducidad del link
  14.  
  15.     if($controlador_final >= $time_actual)
  16.     {
  17.  
  18.         // verificacion del token $do = sha1($_SERVER['HTTP_USER_AGENT'].$destinatario);
  19.  
  20.         if(sha1($_SERVER['HTTP_USER_AGENT'].base64_decode($_GET['de']) == $_GET['do'])
  21.         {
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28. /////// aqui ya deberiamos hacer los cambios de pass etc.......
  29. /////// con esta funcion base64_decode($_GET['de']) obtenemos el email del usuario para hacer los cambios
  30. /////// aqui mostraria un formualario para poner las 2 contraseñas
  31. /////// y ya por ultimo guardarlo en la bd y mostrarle le login
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.         }
  40. else
  41. {
  42.      echo 'el token no coincide';
  43. }
  44.  
  45.     }else{
  46.    
  47.     echo 'link caducado';
  48.    
  49.     }
  50.  
  51. }
  52. else
  53. {
  54.     echo 'Se produjo un error';
  55. }
  56.            
  57. ?>


si frm_mod_cont.php solo quieres la vista pues haz el link con el controlador hacia el index y ya en la funcion que seria el archivo que te he puesto mas arriba frm_mod_cont.php hay ya llamas a la vista , tienes razon deberia de ser asi , siguiendo tu estructura

Última edición por webankenovi; 16/12/2012 a las 13:30
  #39 (permalink)  
Antiguo 16/12/2012, 21:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

gracias por responder pero tengo un inconveniente, no me funciona te voy a describir lo que estoy haciendo

en envio.php envio el enlace

Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&time='.base64_encode(time()).'&us='.base64_encode($destinatario).'&do='.sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.rand()).' ">Recuperar Contraseña</a><br>');

esta es la url que obtengo
http://localhost/volcanicos/views/fr...86ef0cd9d35dd3



en frm_mod_cont.php tengo

Código PHP:
Ver original
  1. if($_GET['ti'] and $_GET['de'] and $_GET['do'])
  2. {
  3. $controlador = 3600; //sg *1 HORA DE CADUCIDAD *
  4. $controlador_final = base64_decode($_GET['ti']) + $controlador ;
  5. $time_actual= time();
  6. if($controlador_final >= $time_actual)
  7. {
  8. if(sha1($_SERVER['HTTP_USER_AGENT'].base64_decode($_GET['de']) == $_GET['do'])
  9. {
  10. /////// aqui ya deberiamos hacer los cambios de pass etc.......
  11. /////// con esta funcion base64_decode($_GET['de']) obtenemos el email del usuario para hacer los cambios
  12. /////// aqui mostraria un formualario para poner las 2 contraseñas
  13. /////// y ya por ultimo guardarlo en la bd y mostrarle le login
  14. }
  15. else
  16. {
  17. echo 'el token no coincide';
  18. }
  19. }else{
  20. echo 'link caducado';
  21. }
  22. }
  23. else
  24. {
  25. echo 'Se produjo un error';
  26. }

y estoy obteniendo el siguiete error
Parse error: syntax error, unexpected '{' in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\volcanicos\views\frm_m od_cont.php on line 117

realice una prueba y el problema esta en esta linea
Código PHP:
Ver original
  1. if(sha1($_SERVER['HTTP_USER_AGENT'].base64_decode($_GET['de']) == $_GET['do'])

que estoy haciendo mal?
  #40 (permalink)  
Antiguo 17/12/2012, 12:30
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

Efectivamente habia un error de sintaxis tan solo era cerra la funcion sha1() , faltaba un parentesis. me lo comi

Código PHP:
Ver original
  1. if(sha1($_SERVER['HTTP_USER_AGENT'].base64_decode($_GET['de'])) == $_GET['do'])

haber si pasas estos nombres de variable (en negrita) en la url

$mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&time='.base64_encode(time()).'&us='.base64_encode($destinatario).'&do='.sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.rand()).' ">Recuperar Contraseña</a><br>');

en esta linea del frm_mod_cont.php tienes que recoger esas variables si te fijas no concuerdan

if($_GET['ti'] and $_GET['de'] and $_GET['do'])

ahora segun te puse yo el link si te fijas veras que si concuerdan

$mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&ti='.base64_encode(time()).'&de='.base64_encode($destinatario).'&do='.$do.' ">Recuperar.Contraseña</a><br>');

asegurate que los nombres de variables que envies sean los mismo que cuando recoges si no sera imposible acceder a ellos , esto deberias de saberlo


como te puse el script tu sistema ya tendria una seguridad relativa fortificando el encriptamiento eso si e incluso aun puedes blindar aun mas tu sistema con muchos mas metodos etc...... pero lo bueno es que aprendes la metodologia para poder aplicar ya despues tu mas seguridad

tambien puedes añadir la ip con la que realizo la peticion del email , tambien lo incluiria .

Última edición por webankenovi; 17/12/2012 a las 12:56
  #41 (permalink)  
Antiguo 19/12/2012, 19:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

webankenovi gracias por tus aportes han sido muy valiosos.

estoy trabajando en la implementacion de la recuperacion de la contraseña mediante el link pero no logro que funcione bien

este es el link que envio
Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&ti='.base64_encode(time()).'&de='.base64_encode($destinatario).'&do='.sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.rand()).' ">Recuperar Contraseña</a><br>');


en frm_mod_cont.php
Código PHP:
Ver original
  1. }
  2. if($_GET['ti'] and $_GET['de'] and $_GET['do'])
  3. {
  4. $controlador = 3600; //sg *1 HORA DE CADUCIDAD *
  5. $controlador_final = base64_decode($_GET['ti']) + $controlador ;
  6. $time_actual= time();
  7. if($controlador_final >= $time_actual)
  8. {
  9. if(sha1($_SERVER['HTTP_USER_AGENT'].base64_decode($_GET['de'])) == $_GET['do'])
  10. {
  11.  
  12. //// form
  13. echo 'aqui esta el form';
  14. }
  15. else
  16. {
  17. echo 'el token no coincide';
  18. }
  19. }else{
  20. echo 'link caducado';
  21. }
  22. }
  23. else
  24. {
  25. echo 'Se produjo un error';
  26. }


esta es la prueba que realize , el problema es en lo que estoy enviando.
Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&ti=1&de=1&do=1">Recuperar Contraseña</a><br>');


Código PHP:
Ver original
  1. if($_GET['ti'] and $_GET['de'] and $_GET['do'])
  2. {
  3. $controlador = 3600; //sg *1 HORA DE CADUCIDAD *
  4. $controlador_final = 1 ;
  5. $time_actual= time();
  6. if($controlador_final == 1)
  7. {
  8. if($_GET['de'] == $_GET['do'])
  9. {
  10.  
  11. //// form
  12. echo 'aqui esta el form';
  13. }
  14. else
  15. {
  16. echo 'el token no coincide';
  17. }
  18. }else{
  19. echo 'link caducado';
  20. }
  21. }
  22. else
  23. {
  24. echo 'Se produjo un error';
  25. }


en pantalla me imprime link caducado

que estoy haciendo mal?
  #42 (permalink)  
Antiguo 20/12/2012, 17:38
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

El link que me pasas es uno que te puse pero no es valido ya que contenia un error y ademas quitamos el rand has cojido un link de loos que te puse no valido

este es valido en el anterior sha1() no estaba cerrado y rand no es valido por que en la validacion no pasamos el rand ya que al ser aleatorio nunca coincidira despues en la validacion o sea que o lo quitamos o generamos un salt o implementamos la ip ya lo que tu quieras pero incluso podrias añadir la ip y ademas un clave , tan solo te lo puse con una clave primero prueba que funcione y si es asi ya implementas lo que tu quieras o lo dejas tal cual a tu gusto¿

Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&ti='.base64_encode(time()).'&de='.base64_encode($destinatario).'&do='.sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.'codigo_clave'.).'">Recuperar Contraseña</a><br>');

Código PHP:
Ver original
  1. if($_GET['ti'] and $_GET['de'] and $_GET['do'])
  2. {
  3. $controlador = 3600; //sg *1 HORA DE CADUCIDAD *
  4. $controlador_email = base64_decode($_GET['ti']);
  5. $controlador_final = $controlador_email + $controlador ;
  6. $time_actual= time();
  7.  
  8. if($controlador_final >= $time_actual)
  9. {
  10.     if(sha1($_SERVER['HTTP_USER_AGENT'].base64_decode($_GET['de']).'codigo_clave') == $_GET['do'])
  11.     {
  12.         echo 'aqui esta el form';
  13.     }
  14.     else
  15.     {
  16.         echo 'el token no coincide';
  17.     }
  18.  
  19. }
  20. else
  21. {
  22.     echo 'link caducado';
  23. }
  24.  
  25. }
  26. else
  27. {
  28.     echo 'Se produjo un error';
  29. }

pruebalo y dime que echo se te imprime ruebalo tal cual te lo deje y igualmente el email que te deje osea la url ok
  #43 (permalink)  
Antiguo 20/12/2012, 21:06
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

webankenovi gracias por responder

copie el link como me lo digiste pero obtengo error al ejecutar
Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&ti='.base64_encode(time()).'&de='.base64_encode($destinatario).'&do='.sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.'codigo_clave'.).'">Recuperar Contraseña</a><br>');

Parse error: syntax error, unexpected ')' in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\volcanicos\views\envio .php on line 118

yo lo cambia a este y envio el correo bien pero al momento de darle click al enlace

Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&ti='.base64_encode(time()).'&de='.base64_encode($destinatario).'&do='.sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.'codigo_clave').'">Recuperar Contraseña</a><br>');


Parse error: syntax error, unexpected T_IF in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\volcanicos\views\frm_m od_cont.php on line 115


intente pero no me funciono.

Última edición por Montes28; 20/12/2012 a las 21:12
  #44 (permalink)  
Antiguo 21/12/2012, 10:55
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

AQUI LO TIENES

Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://localhost/volcanicos/views/frm_mod_cont.php?&ti='.base64_encode(time()).'&de='.base64_encode($destinatario).'&do='.sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.'codigo_clave').'">Recuperar Contraseña</a><br>');

sobraba un punto en la function sha1 , se me escapo ... ..
  #45 (permalink)  
Antiguo 21/12/2012, 11:04
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

ademas te voy a dar una function mas segura que compara los strings en vez del tipico

if(string1 == string2)

seria asi

if(strcmp ( string $str1 , string $str2 ))

saludos

http://es.php.net/manual/es/function.strcmp.php

Etiquetas: cuentas, password, sistema, 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 10:26.