Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/03/2013, 11:44
alejandromaringomez
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Seguridad en enlaces

Hola ,
He encontrado algo muy similar a lo que busco , entro a una página que contiene un enlace..
Código:
<?php
$token = md5(microtime(TRUE) . rand(0, 100000));
session_start();
$_SESSION['token'] = $token;
$_SESSION['token-expires'] = time() + 20;
echo '<a href="enlace.php?token='.$token.'">Prueba</a>';
?>
Ese token que es generado está hecho para que a los 20 segundos después de su generación , si no es clickeado , el enlace ya no es válido , pero yo quiero que caduque con solo un click.
¿Cómo hago esto?
Cuando llegas a el archivo , en este caso enlace.php
Código:
<?php
$token = $_GET['token'];
session_start();
if (!isset($_SESSION['token'], $_SESSION['token-expires']))
{
    die ('token is required!');
}
$token = $_SESSION['token'];
$expires = $_SESSION['token-expires'];
$_SESSION['token'] = NULL;
$_SESSION['token-expires'] = 0;

if ($expires < time() || $token != $token)
{
    die ('Invalid or expired token!');
}
else
{
    print 'Token good!';
}
?>
Si no tiene el enlace token , te avisa , si es válido te deja paso y si han pasado los 20 segundos te salta un aviso.

Tengo 2 problemas..

1o: Estoy en 1and1 y cuando entro correctamente o caducado el link o incluso sin token me sale este mensaje debajo de mi contenido:

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively in Unknown on line 0

2o: En vez de que caduque a los 20 segundos quisiera que caducase cuando ejecute el enlace , ¿esto como lo hago?

Muchas gracias!