Foros del Web » Programando para Internet » PHP »

sistema de recuperación de contraseña olvidada

Estas en el tema de sistema de recuperación de contraseña olvidada en el foro de PHP en Foros del Web. He utilizado un script que aparece en este foro y que pretendo aplicarlo a la página web. Parto de un formulario de control de usuario ...
  #1 (permalink)  
Antiguo 27/05/2009, 12:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 185
Antigüedad: 15 años, 7 meses
Puntos: 1
sistema de recuperación de contraseña olvidada

He utilizado un script que aparece en este foro y que pretendo aplicarlo a la página web.

Parto de un formulario de control de usuario que contiene los campos de email,
username y passaword. También he añadido un link ¿ Olvidaste la contraseña?
que me dirige a recuperar_1.php donde comprobaré si la dirección de correo esta
en la base de datos usuario y si es así me dirigiré a recuperar_2.php .

¿ La primera pregunta es como crear un formulario de comprobación del correo en la base de datos y otro formulario que procese los campos password, password2 y tmptxt_seg?

¿ en el campo tmptxt_seg que tipo de dato debo incluir en la tabla usuarios ?



recuperar_1.php

<?php

//conectamos a la BD

$conexion = mysql_connect('localhost','ipcval','ip2')or die ('Ha fallado la conexión: '.mysql_error());

mysql_select_db('base_ip)or die ('Error al seleccionar la Base de Datos: '.mysql_error());


function quitar($mensaje) //funcion para quitar caracteres no permitidos
{
$nopermitidos = array("'",'\\','<','>',"\"",";","$","%","&","/","|","{","}","[","]","+","#");
$mensaje = str_replace($nopermitidos, "", $mensaje);
return $mensaje;
}

function mysql_escape($cadena) { //funcion pasada por okram para limpiar campos escritos por usuarios
if(get_magic_quotes_gpc() != 0) { //y aplicar mysql_real_escape_string a las variables y stripslashes si la magic cuotes estan activadas

$cadena = stripslashes($cadena);
}
return mysql_real_escape_string($cadena);
}

$email = quitar($_POST ['email']);
$_SESSION['email'] = $email; //guardamos email en una variable de session para recuperarlo en el siguiente form





if(isset($_POST['email']) ) { //comprobamos que el campo email trae algun valor

$query = "SELECT * FROM usuarios WHERE email='$email'"; //seleccionamos la informacion de la BD correspondiente al email del user
$result = mysql_query($query , $conexion) or die ( mysql_error() );

while ($row = mysql_fetch_array($result)){


if (isset($row['password'])){ //compruebo que exista el password del email enviado


$_SESSION['username'] = $row['usuario'];//guardamos el usuario en una variable de sesion
//para no tener problemas con header uso el siguiente script de java para redirigir

?>

<SCRIPT LANGUAGE="javascript">
location.href = "recuperar_2.php";
</SCRIPT>
<?
}else{

echo "El email no esta registrado en nuestra base de datos.";

}}}

?>
------------------------------------------------------------------------------------------
recuperar_2.php

<?php

session_start(); //abrimos la sesion para poder despues pasar variables de una pagina a otra

//datos para establecer la conexion con la base de mysql.
$conexion=mysql_connect('localhost','ipval','ip09' )or die ('Ha fallado la conexión: '.mysql_error());

mysql_select_db('base_ip')or die ('Error al seleccionar la Base de Datos: '.mysql_error());



function quitar($mensaje) //funcion para quitar caracteres no permitidos
{
$nopermitidos = array("'",'\\','<','>',"\"",";","$","%","&","/","|","{","}","[","]","+","#");
$mensaje = str_replace($nopermitidos, "", $mensaje);
return $mensaje;
}
function mysql_escape($cadena) {
if(get_magic_quotes_gpc() != 0) {
$cadena = stripslashes($cadena);
}
return mysql_real_escape_string($cadena);
}







if (isset($_POST["password"])) {

$password = quitar($_POST["password"]); //variable que viene del campo del form pasword
$password2 = quitar($_POST["password2"]);//variable que viene del campo del form pasword2
$password = mysql_escape($password); //aplico la funcion mysql_escape
$password2 = mysql_escape($password2);

$password = md5($password); // codificamos los password con md5
$password2 = md5($password2);
$email = $_SESSION['email']; // recogemos la variable email y username que guardamos en la sesion en el script anterior
$username = $_SESSION['username'];




// Hay campos en blanco
if($password==NULL|$password2==NULL) {
echo "un campo está vacio.";

}else{
// si coiciden los codigos de seguridad
if (quitar($_SESSION['tmptxt_seg']) !== quitar($_POST['tmptxt_seg'])) {
echo "Introdujo mal el codigo de seguridad.";

} else {




// ¿Coinciden las contraseñas?
if($password!=$password2) {
echo "Las contraseñas no coinciden";
formRegistro();
}else{


$query = "UPDATE usuarios
SET password = '$password' WHERE usuario = '$username' OR email ='$email' " ;
mysql_query($query) or die(mysql_error());

//obtengo los datos del usuario para mandar el email
$result = "SELECT * FROM usuarios WHERE password = '$password'";

$result = mysql_query($result) or die ( mysql_error() );

$row = mysql_fetch_array($result);

echo "La activacion de su nuevo password tuvo exito.";


// Datos del email

$nombre_origen = "Lo que sea";
$email_origen = "[email protected]";
$email_copia = "[email protected]";
$email_ocultos = "[email protected]";
//$email_destino = "".$row['email']."";

$email_destino = "[email protected]"; //cambiar esta linea por la de encima cuando se termine la aplicacion para pruebas pon tu email

$asunto = "Activacion de nueca contraseña, guarde este email.";

$mensaje = '<table width="629" border="0" cellspacing="1" cellpadding="2">


<tr>

<td width="623" align="left"></td>

</tr>

<tr>

<td bgcolor="#2EA354"><div style="color:#FFFFFF; font-size:14; font-family: Arial, Helvetica, sans-serif; text-transform: capitalize; font-weight: bold;"><strong> Estos son sus datos '.$row['usuario'].'</strong></div></td>

</tr>

<tr>

<td height="95" align="left" valign="top"><div style=" color:#000000; font-family:Arial, Helvetica, sans-serif; font-size:12px; margin-bottom:3px;"> USUARIO: '.$row['usuario'].'</strong><br><br><br>

<strong>SU EMAIL : </strong>'.$row['email'].'</strong><br><br><br>
<strong>REACTIVO SU NUEVA CONTRASEÑA SIN NINGUN INCIDENTE.</strong><br><br>
<strong>GRACIAS POR CONFIAR EN CEVIT.</strong><br>
<strong>PRONTO ACTUALIZAREMOS CONTENIDOS, ESTATE ATENTA/O.</strong><br>

</div>

</td>

</tr>

</table>';









$formato = "html";

//************************************************** ***************//
$headers = "From: $nombre_origen <$email_origen> \r\n";
$headers .= "Return-Path: <$email_origen> \r\n";
$headers .= "Reply-To: $email_origen \r\n";
$headers .= "X-Sender: $email_origen \r\n";
$headers .= "X-Priority: 3 \r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Transfer-Encoding: 7bit \r\n";

//************************************************** ***************//

if($formato == "html")
{ $headers .= "Content-Type: text/html; charset=iso-8859-1 \r\n"; }
else
{ $headers .= "Content-Type: text/plain; charset=iso-8859-1 \r\n"; }

if (@mail($email_destino, $asunto, $mensaje, $headers))
{ }

}
}
}
}

?>

---------------------------------------------------------------------------------------
seguridad.php
<?php



function randomText($length) { //FUNCION PARA CREAR UNA CLAVE ALEATORIA
$pattern = "123456789PIUYTREWQASDFGHJKLMNBVCXZ123456789PLMK1I JNBHUYGVC123456789FTRDXZSEWAQWSDERFTGYHUJ123569876 543ERDFREDESWQASWQASDGHGTY";

for($i=0;$i<$length;$i++) {

$key .= $pattern{rand(0,35)};
}
return $key;
}

$_SESSION['tmptxt_seg'] = randomText(5); //aqui guardo el numero que se escribira en la imagen en variable de sesion para su us en la confirmacion

$captcha_seg = imagecreatefromgif("../carpeta/carpeta/bgcaptcha.gif"); //obtenemos la imagen de fondo

$colText = imagecolorallocate($captcha_seg, 0, 0, 0);

imagestring($captcha_seg, 5, 10, 4, $_SESSION['tmptxt_seg'], $colText);

header("Content-type: image/gif");

imagegif($captcha_seg);

?>
  #2 (permalink)  
Antiguo 27/05/2009, 13:58
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: sistema de recuperación de contraseña olvidada

Cita:
¿ La primera pregunta es como crear un formulario de comprobación del correo en la base de datos y otro formulario que procese los campos password, password2 y tmptxt_seg?
¿Porque necesariamente tienes que crear 2 archivos para procesarlo? Puedes hacerlo perfectamente con uno.

Que el usuario ponga su correo, si el correo se encuentra en la base de datos que cree una cadena aleatoria y la inserte en la base de datos, para luego enviarle un e-mail y comprobar que en realidad es el dueño de la cuenta el cual desea cambiar la contraseña. Cuando el usuario haga clic, se comprueba que la cadena aleatoria sea igual a la enviada por URL y se prosigue a pedirle al usuario que cambie la contraseña.

Cita:
¿ en el campo tmptxt_seg que tipo de dato debo incluir en la tabla usuarios ?
xD Ni idea .... no se de donde has sacado ese sistema de usuarios. No somos adivinos xD.

Código PHP:
while ($row mysql_fetch_array($result)){ 


if (isset(
$row['password'])){ //compruebo que exista el password del email enviado 


$_SESSION['username'] = $row['usuario'];//guardamos el usuario en una variable de sesion 
//para no tener problemas con header uso el siguiente script de java para redirigir 
Hacer eso es muy inseguro, y si la variable con la cual identificas que un usuario esta logueado es esa misma variable de SESSION?
xD Simplemente apago Javascript, voy a olvide mi contraseña, pongo el correo del administrador y voila! xD Te hacen un desastre en el sitio.
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 02:20.