Hola quetal estoy desarrolllando un script que permite al usuario recuperar la contraseña si se le olvido esta hecho en PHP5 pues no tiene ningun error pero me gustaria que me dieran consejos sobre como lo estoy implementando por ejemplo si tengo errores, seguridad etc muchas cosas que me podrian aportar para mejorarlo. siii ya lo se hay un script ya hecho en el foro pero la cuestion es que lo queria hacer

jeje bueno aqui va
Y apenas llevo como 1 semana con PHP5 asi que entre mas me puedan aconsejar estaria super agradecido
Primero los formularios
RecupearPassword.php
Código PHP:
<?php
session_start();
function setEmail($mensaje="")
{
echo $mensaje;
?>
<form action="clasesRecuperarPassword.php" method="post">
<table>
<tr><td>Escriba su Email</td><td><input type="text" name="email"></td></tr>
<tr><td><input type="submit" name="setEmail" value="Enviar"></td></tr>
</table>
<form>
<?
}
function setPassword($mensaje="")
{
echo $mensaje;
?>
<form action="clasesRecuperarPassword.php" method="post">
<table>
<tr>
<td>Escriba su contraseña</td><td><input type="text" name="clave1"></td>
</tr>
<tr>
<td>Repita su contraseña</td><td><input type="text" name="clave2"></td>
</tr>
<tr>
<td><input type="submit" name="setPassword" value="Enviar"></td>
</tr>
</table>
</form>
<?
}
if($_GET['accion']=="Remail") //escribir email
{
setEmail($_GET['mensaje']);
}
elseif($_GET['accion']=="Enmail")//escribir passwords
{
setPassword($_GET['mensaje']);
}
?>
Código PHP:
<?php
session_start();
require_once("DB.php");
class Utiles
{
protected function CamposVaciosPass($array)
{
foreach($array as $clave => $valor)
{
if(empty($valor) || !isset($clave))
{
header("location:RecuperarPassword.php?accion=Enmail&mensaje=".
urlencode("Los campos se encuentran incompletos"));
return false;
}
}
return true;
}
protected function CamposVaciosEmail($email)
{
if(empty($email))
{
header("location:RecuperarPassword.php?accion=Remail&mensaje=".
urlencode("El campo Email se encuentra vacio"));
return false;
}
return $email;
}
protected function quitar($email) //funcion para quitar caracteres no permitidos
{
$nopermitidos = array("'",'\\','<','>',"\"",";","$","%","&","/","|","{","}","[","]","+","#");
$email = str_replace($nopermitidos,"", $email);
return $email;
}
protected function quitar_htmls($cadena)
{
$cadena=strip_tags($cadena);
return $cadena;
}
protected function mysql_escape($cadena)
{
if(mysql_real_escape_string($cadena))
{
return $cadena;
}
else
{
echo "Ocurro un error escapando la cadena";
return false;
}
}
}
class EnviarMensaje extends Utiles
{
protected $email;
//metodo configuro el email
function EnviarMensaje($email)
{
//Utilizo los metodo heredados de la clase Utiles
if($this->CamposVaciosEmail($email))
{
//quito toda etiqueta HTML
$email=$this->quitar_htmls($email);
//quito todo caracter no permitido
$email=$this->quitar($email);
//compruebo que el email existe en la DB
if($this->ComprobarEmail($email))
{
//si el email existe mando el email de verificacion
$this->MandarEmail($email);
$this->email=$email;
session_register("email");
}
}
}
protected function ComprobarEmail($email)
{
$Comprobar=mysql_query("select login,email from usuarios where email='$email'");
if($Comprobar)
{
if(mysql_num_rows($Comprobar)>0)
{
return true; //Si existe algun usuario con este email
}
else
{
header("location:RecuperarPassword.php?accion=Remail&mensaje=".
urlencode("El email no existe"));
return false;
}
}
}
protected function MandarEmail($email)
{
//manda un email para verificar si en realidad el usuario N perdio el
//password si es verdad sigue con la otra funcion
$asunto="Verificacion de Usuario";
$mensaje="Hemos recibido una solicitud para recuperar la contraseña y hemos enviado este
Email para verificar que usted fue el que envio este mensaje.<br>
Para verificar que usted envio este mensaje de clic en el siguiente enlace <h1>$email</h1>
http://www.truekesoft.net/foro_sebas/RecuperarPassword.php?accion=Enmail
";
$headers = "From: Admin [email protected] \r\n";
$headers .= "Return-Path: [email protected] \r\n";
$headers .= "Reply-To: [email protected] \r\n";
$headers .= "X-Sender: [email protected] \r\n";
$headers .= "X-Priority: 3 \r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Transfer-Encoding: 7bit \r\n";
if(@mail($email,$asunto,$mensaje,$headers))
{
header("location:RecuperarPassword.php?accion=Remail&mensaje=".
urlencode("Porfavor verifique su correo"));
return true;
}
else
{
echo "No se pudo enviar el Email";
return false;
}
}
}
class RecepcionMensaje extends Utiles
{
private $clave1;
private $clave2;
private $claveEncriptada;
function RecepcionMensaje($ArrayForm)
{
if($this->isset_session("email"))
{
if($this->CamposVaciosPass($_POST))
{
extract($_POST);
$this->clave1=$clave1;
$this->clave2=$clave2;
//quito etiquetas HTML
$this->clave1=$this->quitar_htmls($this->clave1);
$this->clave2=$this->quitar_htmls($this->clave2);
//Todo sale bien verifico las contraseñas y las encrito con sha1
if($this->contrasenas($this->clave1,$this->clave2))
{
}
}
}
}
protected function contrasenas($clave1,$clave2)
{
if($clave1==$clave2 && $clave1>=6 && $clave2>=6)
{
$clave1=sha1($clave1);
return $this->claveEncriptada=$clave1;
}
return false;
}
protected function isset_session($email)
{
if(isset($_SESSION["email"]))
{
return true;
}
header("location:RecuperarPassword.php?accion=Enmail");
return false;
}
}
//Me ayuda a saber cual es el formulario de llegada si es setMail o setPassword
if($_REQUEST['setEmail']=="Enviar")
{
$email=$_POST['email'];
$mensaje=new EnviarMensaje($email);
}
elseif($_REQUEST['setPassword']=="Enviar")
{
//la URL contiene el email de la persona y se realiza la consulta con ese email para update
$password=new RecepcionMensaje($_POST);
}
?>
Esta bien largo espero alguien tenga tiempo de revisarlo gracias



