Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: TrashAmbishion en 30 Junio 2013, 21:56 pm



Título: Duda como generar un link aleatorio...!!
Publicado por: TrashAmbishion en 30 Junio 2013, 21:56 pm
Hola amigos hace un tiempo publique una duda sobre como puedo hacer para que mis usuarios tengan que acceder unicamente desde un mi link que dice Correo, algunos me dijeron que chequeara el lugar del que venian no se si era con "location", cree un hilo nuevo porque quisiera saber si es posible crear un link aleatorio que se genere cada ves que un usuario quiera entrar....

Salu2


Título: Re: Duda como generar un link aleatorio...!!
Publicado por: engel lex en 1 Julio 2013, 01:46 am
para generar un link aleatorio haces lo siguiente

creas una tabla para ese fin con usuario y valor a meter

usas rand() para generar un numero al azar
http://php.net/manual/es/function.rand.php (http://php.net/manual/es/function.rand.php)

guardas ese valor en la tabla y se lo pasas al usuario, si el devuelve un link correspondiente de usuario y link aleatorio correcto listo...


Título: Re: Duda como generar un link aleatorio...!!
Publicado por: #!drvy en 1 Julio 2013, 03:22 am
Esas cosas se suelen hacer con sessiones. Son muy parecidas a los captchas. Te dejo un ejemplo:

generar.php
Código
  1. <?php
  2.  
  3.  
  4. $nombre_archivo = 'archivo.txt';
  5. $link = 'http://mipagina.com/descargar.php';
  6.  
  7. // Generar un hash en sha1 totalmente aleatorio.
  8. $sesc = sha1(rand(0,999).rand(8,888).$nombre_archivo.rand(1,9999));
  9.  
  10. // Poner el hash en session para futura comprobación.
  11. $_SESSION['link'][$nombre_archivo] = $sesc;
  12.  
  13. echo '<h1>Tu archivo esta listo</h1>';
  14. echo $link.'?archivo='.$nombre_archivo.'&sesc='.$sesc;
  15.  
  16. ?>

Esto generaría un enlace del siguiente tipo:
http://mipagina.com/descargar.php?archivo=archivo.txt&sesc=7c44781daa257c8931fed1f0eb79f4c8a0bc98a0

descargar.php
Código
  1. <?php
  2.  
  3.  
  4. // Si sesc o archivo estan vacios, morrimos.
  5. if(empty($_GET['sesc']) || empty($_GET['archivo'])){ die('Consulta no valida. SESC o ARCHIVO faltan.'); }
  6.  
  7. // Si la session del usuario no coincide con la que nos envia... morrimos.
  8. elseif($_GET['sesc']!==@$_SESSION['link'][$_GET['archivo']]){ die('Tu session no es valida.'); }
  9.  
  10. // Destruir la session para que no pueda volver a utilizar el mismo enlace.
  11. unset($_SESSION['link'][$_GET['archivo']]);
  12.  
  13. // Descarga de archivo.
  14. header('Content-Type: application/octet-stream');
  15. header("Content-disposition: attachment; filename=\"".$_GET['archivo']."\"");
  16. die(readfile($_GET['archivo']));
  17.  
  18. ?>

PD: Obviamente este código es mega-super-hiper inseguro. Pero tu ya tendrás la manera de generar los archivos y tal así que te lo muestro como ejemplo.

PD2: Como ta ha mencionado @engelx, si vas a utilizar usuarios y quieres que los enlaces sean permanentes para ellos tendrás que almacenar el valor en la base de datos.

Saludos