Foros del Web » Programando para Internet » PHP »

Proteger descargas, métodos..

Estas en el tema de Proteger descargas, métodos.. en el foro de PHP en Foros del Web. Buenas. Tengo dudas sobre el método de descarga de archivos más utilizado. Me explico: Normalmente cuando no se quiere mostrar la url original del archivo ...
  #1 (permalink)  
Antiguo 13/12/2007, 07:41
 
Fecha de Ingreso: mayo-2007
Mensajes: 29
Antigüedad: 16 años, 10 meses
Puntos: 0
Proteger descargas, métodos..

Buenas.

Tengo dudas sobre el método de descarga de archivos más utilizado.

Me explico:
Normalmente cuando no se quiere mostrar la url original del archivo a descargar, se utiliza los header();
Supongamos que a través de la siguiente dirección "index.php?descarga=1" se ejecuta el siguiente código:

Ejemplo:
header('descargas/archivo.rar');
die;

De esta manera, automáticamente salta la ventana de descarga sin mostrar la url original.
Como bien dice mi asunto, necesito protegerlas para que solo usuarios registrados y logueados accedan a dicha descarga a través de esa URL.

Mi pregunta es:
¿Es posible averiguar la URL original, utilizando dicho método?; ¿Conocen algún otro?;

También creo que se puede hacer via FTP (obligado a conectar con user y pass), en fin, quiza alguien puede guiarme.

Saludosss.
  #2 (permalink)  
Antiguo 13/12/2007, 07:55
Avatar de popobcn
Moderador
 
Fecha de Ingreso: noviembre-2006
Ubicación: Cerdanyola del Vallès
Mensajes: 3.892
Antigüedad: 17 años, 5 meses
Puntos: 1142
Re: Proteger descargas, métodos..

Hola Raulii,

Yo creo que no es necesario complicarlo tanto, ya que el problema se puede solventar "capando" el acceso a la URL de descarga en caso de que el usuario o bien no este registrado o correctamente identificado.

En vez de colocar los enlaces a las descargas "abiertos" simplemente los colocaria o no si se da una condicion, vamos de esta manera:

Código PHP:
<?php
//La variable $usuario contiene la info del usuario registrado / logueado

if($usuario!=""){
  echo 
"<a href=\"enlace_a_la_descarga.xxx\">Descargar!</a>";
}else{
  echo 
"<a href=\"\">Registrate!</a>";
}
?>
Al introducir el código del enlace de la descarga en PHP no es visible para los usuarios NO registrados/logueados, impidiendo ver el origen del archivo.

Saludos
  #3 (permalink)  
Antiguo 13/12/2007, 08:05
 
Fecha de Ingreso: junio-2006
Mensajes: 270
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Proteger descargas, métodos..

Raulii, creo que te falta un poco de conocimiento sobre el protocolo http. Cuando coges un archivo de un http, puedes ver de donde viene ese archivo con cualquier analizado de http, como charles o wireshark. La ruta es imposible esconderla si un usuario va a recibir un archivo de ese sitio.
Cita:
¿Es posible averiguar la URL original, utilizando dicho método?; ¿Conocen algún otro?
Es imposible esconder la ruta, a menos que sea el php quien te proporcione el archivo. Pero no me entiendas mal. Cuando digo "proporcione", no digo que te lleve al archivo, sino que sea él quien te genere el archivo. No se si habrá metodos. Evidentemente tiene que manejar datos binarios. Creo que con imagenes si se puede, aunque no estoy seguro.
  #4 (permalink)  
Antiguo 13/12/2007, 08:07
 
Fecha de Ingreso: mayo-2007
Mensajes: 29
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Proteger descargas, métodos..

Hola popobcn, gracias por tu respuesta, pero creo que me haz mal interpretado jejeje.
Aver, la autentificación sobre las descargas, no tengo problema en ello. Es más, el sistema de registro, autentificación, descargas, etc. lo tengo hecho.

Lo que yo quiero evitar es que puedan saber la URL original del archivo, esten o no registrados.
En otras palabras, para descargar "x" archivo, SI O SI deban utilizar la URL creada por el sistema y no la ORIGINAL.

Ejemplo:
Url creada: descargas.php?id=1
Url original: descargas/archivo.zip

Por cierto también he visto que en algunos sistemas utilizan varias cabeceras header.

Saludosss!
  #5 (permalink)  
Antiguo 13/12/2007, 08:10
 
Fecha de Ingreso: mayo-2007
Mensajes: 29
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Proteger descargas, métodos..

Hola dark, he visto ejemplos como estos:

$size = filesize($filename);
header("Content-Transfer-Encoding: binary");
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$nombre");
header("Content-Length: $size");
readfile("$filename");

Utilizan cabeceras, como la de Encoding, entre otras..

Por cierto: Si es asi como dices (imposible ocultar la url original), entonces todas las paginas de descargas de archivos, no estan seguras? vamos que rapidshare.com esta jodido. xD.

Saludos..!
  #6 (permalink)  
Antiguo 13/12/2007, 08:49
Avatar de popobcn
Moderador
 
Fecha de Ingreso: noviembre-2006
Ubicación: Cerdanyola del Vallès
Mensajes: 3.892
Antigüedad: 17 años, 5 meses
Puntos: 1142
Re: Proteger descargas, métodos..

Buenas de nuevo Raulii...

Pues si, te he entendido mal... y consultando con el "oraculo" .oO(Google) he encontrado varias entradas que hacen referencia a la modificacion de las URL mediante cabeceras... De hecho, ahi por ahi corriendo scripts completitos que modificando tan solo los archios de ejemplo por los correspondientes (o mejor variables xD ) darían el pego.

Aqui he encontrado códigos relacionados con tus inquietudes:

www.webnova.com.ar/codigo-fuente.php?recurso=214
http://www.webtaller.com/construccio...cargas-php.php

Sobre cual puede ser el mejor de todos ellos, Ni idea la verdad, nunca ha despertado mi interés el tema de las descargas o mejor dicho, aún no ha surjido la necesidad de protegerlas... creo que este es un tema interesante, ya que en GOOGLE aparecen 700.000 mil temas relacionados con esto, pero a saber cual es realmente el mejor de ellos :)

Rebuscando por ahi, he encontrado este código que cumple estas funciones:

Código PHP:
<? 
/* 
Copyright (c) 1999 Marcel Lemmen 
       E-mail: [email][email protected][/email] 
       All  rights  reserved. 
*/ 

$files=array( 'track01.mp3''escreen.exe'); 
$filenames=array( 'Thank ABBA for the music.mp3''Escreen.exe'); 
$additional_info=array( 'Various artists - Thanx ABBA for the music 
: 4978602 by 
tes'
'Shareware program to make a screenshot: 529920 bytes'); 
$url="/home/lemmen/public_html/data/"
/* When the files are on another server, use the 
   whole address ([url]http://www.server.com/dir/[/url]) in stead of 
/home/lemmen... */ 
        
$referer=ereg_replace"\?.""",$HTTP_REFERER);  
$thisfile="http://$HTTP_HOST$PHP_SELF"
        
if (
$referer!=$thisfile){ 
        echo 
"<center><big>Homepage: <a 
href=\"http://home.support.nl/~lemmen\"> 
http://home.support.nl/~lemmen</big><br><hr><br><br></center>"

        for (
$i=0;$i<count($files);$i++) 
        echo  
"<P><A 
HREF=\"$PHP_SELF?$i\">"
,$filenames[$i], "</A> 
$additional_i 
nfo[$i]\n"


else { 
        
$i=$QUERY_STRING
        
$total=$url $files[$i]; 
        
Header "Content-Type: application/octet-stream"); 
        
Header "Content-Length: ".filesize($total)); 
        
Header"Content-Disposition: attachment; 
filename=$filenames[$i]"
); 
        
readfile($total); 

?>
Espero que te sirva de algo.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:17.