Foros del Web » Programando para Internet » PHP »

Olvide mi contraseña

Estas en el tema de Olvide mi contraseña en el foro de PHP en Foros del Web. Amigos podrian orientarme en el desarrollo de un modulo (script) que le permita a los usuarios recuperar su contraseña por si se les olvida en ...
  #1 (permalink)  
Antiguo 05/02/2009, 14:30
 
Fecha de Ingreso: febrero-2006
Mensajes: 155
Antigüedad: 18 años, 2 meses
Puntos: 0
Olvide mi contraseña

Amigos podrian orientarme en el desarrollo de un modulo (script) que le permita a los usuarios recuperar su contraseña por si se les olvida en mi web? , muchas gracias de antemano. ;)
__________________
Gabriel T. Ballesteros
  #2 (permalink)  
Antiguo 05/02/2009, 14:39
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: Olvide mi contraseña

Lo ideal es no guardar la contraseña directamente en tu base de datos, sino encriptada (md5), con esto aumenta un poco la seguridad, pero obliga a "resetear contraseña" cuando un usuario no la recuerda y ese proceso yo lo hago mas o menos asi:

1- El usuario ingresa nick o email en un formulario
2- Verifico que el nick o email existan, creo un par de variables, una llave (10 caracteres) y una cadena de verificacion (20 caracteres) que guardo en base de datos, directamente en el registro del usuario
3- Envio mail al usuario para notificar que inicio el tramite para reestablecer su contraseña, con el link a otro formulario donde ingresara los datos enviados
4- En el formulario para completar el proceso pido:
---- nick
---- llave
---- cadena de verificacion
---- nuevo pass
---- confirmacion de nuevo pass

Si el usuario lleno correctamente los datos, entonces elimino del registro la llave y la cadena de verificacion y actualizo el nuevo pass, enviando otro correo al usuario para confirmar que el proceso se completo.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 05/02/2009, 18:30
 
Fecha de Ingreso: febrero-2006
Mensajes: 155
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Olvide mi contraseña

yo hice algo mas o menos asi chekalo
Código PHP:
<?php 
// Este fichero recibe y procesa los datos del formulario de recuperacion de contraseña 
// en el que se escriben usuario y email 

// recogemos las variables enviadas por el formulario 
$nombreusuario=$_POST['nombreusuario']; 
$emailusuario=$_POST['emailusuario']; 

// Conectamos a la base de datos 
// Las variables de conexion se suelen poner en un fichero de configuracion que se incluye 
include "mysql.inc"
$con mysql_connect($dbhost$dbusername$dbpass); 
mysql_select_db($dbname); 

// Consultamos si existe $nombreusuario + $emailusuario 
$res=mysql_query("SELECT COUNT(*) FROM usuarios WHERE nombreusuario='$nombreusuario' AND emailusuario='$emailusuario'"); 

if (
mysql_num_rows($res)==0) { 
// Si no existe, datos incorrectos y fin del proceso y volvemos al formulario de recuperacion 
header("Location:formulario.php"); 

else { 
// Si existe, buscamos en la bd 
$res=mysql_query("SELECT * FROM usuarios WHERE nombreusuario='$nombreusuario' AND emailusuario='$emailusuario'"); 
$row=mysql_fetch_assoc($res); 
$claveusuario=$row['claveusuario']; 

// enviamos el email de recuperacion 
$headers "MIME-Version: 1.0\r\n"
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"
mail($emailusuario"Recuperación""Sus datos en nuestra web son $nombreusuario, $claveusuario"$headers); 

?>
ahora me agrada la idea de encriptar las contraseñas porq no lo se hacer dejame documentarme a ver.
__________________
Gabriel T. Ballesteros
  #4 (permalink)  
Antiguo 06/02/2009, 12:39
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: Olvide mi contraseña

Para almacenar las contraseñas encriptadas puedes usar solo md5, o acompañarlo con algo adicional para aumentar un poco la seguridad, ejemplo:

Código PHP:
// Creamos una llave numerica
$key 28459413;

// Encriptamos la clave
$safe_save_pass md5($key $claveusuario);

// Almacenas la clave encriptada en la base de datos
// Solo asegurate de que se pueda guardar completa (entre 40 y 50 caracteres)

// Cuando el usuario ingrese (login)
// Usas la misma $key mencionada arriba
// Encriptas la clave ingresada en el formulario
$login_pass md5($key $_POST['password']);

// Comparas las dos claves encriptadas
if($login_pass != $claveusuario)
    
// Nunca des mensaje de que el nombre es correcto y el pass no
    
die('Nombre de usuario o clave de acceso incorrectos.'); 
Problema de seguridad en tu script:

Código PHP:
include "mysql.inc"
Si a algun usuario se le ocurre teclear sitio.com/mysql.inc lo mas seguro es que obtenga ese archivo, ya sea desplegado como texto o disponible para descarga, si almacenas ahi los datos de conexion a MySQL, entonces practicamente tendra acceso libre.

Renombra el archivo a mysql.inc.php, o como prefieras, pero con extension php y, adicionalmente, define una constante en tus scripts que verificaras antes de realizar la conexion a base de datos:

Scripts:
Código PHP:
define('conecta'1);
include 
'mysql.inc.php';
// El resto de tu codigo 
mysql.inc.php:
Código PHP:
if(!defined('conecta'))
    die(
'Acceso no permitido.');

// El resto de tu codigo aqui 
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 06/02/2009, 16:23
 
Fecha de Ingreso: febrero-2006
Mensajes: 155
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Olvide mi contraseña

Perfecto lo probare y te comento muchas gracioas por tu ayuda, sobre todo para los problemas de seguridad ya que tengo que cuidar mucho la web de ese tipo de cosas ya que el sitio donde va a ser colocada sus usuarios son algo malintencionados.
__________________
Gabriel T. Ballesteros
  #6 (permalink)  
Antiguo 11/06/2009, 21:21
 
Fecha de Ingreso: mayo-2009
Ubicación: Colombia
Mensajes: 21
Antigüedad: 15 años
Puntos: 0
Respuesta: Olvide mi contraseña

Muuuy buen aporte, pero poseo problemas, me llega el correo, pero no me llega la informació(clave), dejo el codigo a ver si me pueden dar una mano....Gracias
Cita:
Código enviar contrase&#241:
Ver original
  1. <?php  
  2. // Este fichero recibe y procesa los datos del formulario de recuperacion de contraseña  
  3. // en el que se escriben usuario y email  
  4.  
  5. // recogemos las variables enviadas por el formulario  
  6. $ducumento=$_POST['documento'];  
  7. $email=$_POST['email'];  
  8.  
  9. // Conectamos a la base de datos  
  10. // Las variables de conexion se suelen poner en un fichero de configuracion que se incluye  
  11.  
  12. $con = mysql_connect(localhost, adsisena_comercializadora, sena);  
  13. mysql_select_db(adsisena_comer);  
  14.  
  15. // Consultamos si existe $nombre + $email
  16. $res=mysql_query("SELECT COUNT(*) FROM usuarios WHERE documento='$documento' AND email='$email'");  
  17.  
  18. if (mysql_num_rows($res)==0) {  
  19. // Si no existe, datos incorrectos y fin del proceso y volvemos al formulario de recuperacion  
  20. header("Location:recuperaclave.html");  
  21. }  
  22. else {  
  23. // Si existe, buscamos en la bd  
  24. $res=mysql_query("SELECT * FROM usuarios WHERE documento='$documento' AND email='$email'");  
  25. $row=mysql_fetch_assoc($res);  
  26. $clave=$row['clave'];  
  27.  
  28. // enviamos el email de recuperacion  
  29. $headers = "MIME-Version: 1.0\r\n";  
  30. $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";  
  31. mail($email, "Recuperación", "Tú cleve en nuestro aplicativo es: $clave", $headers);  
  32. }  
  33. ?>
Hice pruebas cambiando $_POST pòr $_GET y $_REQUEST, cambie el campo de la tabla que quiero que llegue al email el unico que me llego fue $email, no me llega $clave(que es la que necesito) ni$documento......Gracias

Última edición por jdarkname; 11/06/2009 a las 21:27
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 01:56.