Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/02/2009, 00:05
Avatar de acoevil
acoevil
 
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
Testeando mi sistema

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>=&& $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