Ver Mensaje Individual
  #10 (permalink)  
Antiguo 05/07/2013, 08:04
Avatar de gildus
gildus
 
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 9 meses
Puntos: 105
Respuesta: Usando Hash en URL

Holas,

En la parte que generas tu hash yo lo usaria asi:

Código PHP:
Ver original
  1. $hash = sha1(uniqid(mt_rand()));

Ahora en la parte que envias la URL, porque no tambien enviar el email como parametro ?, algo como:

'http://dominio.com/verify/verify.php?hash='.$hash.'&email='.$email;

Ahora cuando lo valides en el archivo verify.php ya no consultarias dos veces sino una sola vez ,aunque viendolo como lo realizas puedes tambien unirlos en una sola consulta:

Código PHP:
Ver original
  1. /// ..
  2. $search = mysql_query("SELECT email, hash, hash_usado FROM proceso WHERE hash='".$hash."' AND hash_usado='0'") or die(mysql_error());
  3. $match  = mysql_num_rows($search);
  4. if($match > 0){
  5.     $today = date("Y-m-d H:i:s");
  6.     $valida = mysql_fetch_array($search);
  7.     $email = $valida['email'];
  8. /// ...


Y un detalle tambien, que no te recomendaria lo de mostrar el error mysql_error() al usuario final porque pueda ser que muestres datos que no deberian podrias usar algo generico por ejemplo die('Error en confirmación').

Otro detalle pueda que pueda ser util, es que uses SALT, para generar tus hash, por ejemplo:

Cuando envies la URL
Código PHP:
Ver original
  1. $salt = sha1(uniqid());
  2. $token = sha1($email.$salt).'$'.$salt;
  3. echo 'http://dominio.com/verify/verify.php?t='.$token.'&e='.$email;
Y cuando lo recibas o verifiques

Código PHP:
Ver original
  1. $tokenRecibido = $_GET['t'];
  2. $emailRecibido = $_GET['e'];
  3. list($emailHashed, $saltEnviado) = explode('$', $tokenRecibido);
  4. if($emailHashed == sha1($emailRecibido.$saltEnviado)) {
  5.     //Ahora recien consultas a tu BD, ... WHERE SHA1(email) = '.$email.' ....
  6. } else {
  7.     // echo 'Ups!';
  8.               // redicciona a un 404 por ejemplo.
  9. }


Bueno espero que te pueda servir de algo, éxitos!.

Saludos,

PD: Tratemos de dejar la libreria mysql usemos PDO o sino Mysqli
__________________
.: Gildus :.