Foros del Web » Programando para Internet » PHP »

Evitar que te pillen las descargas

Estas en el tema de Evitar que te pillen las descargas en el foro de PHP en Foros del Web. Tengo este código (funciona a la perfección): Código PHP: <? if ( $HTTP_POST_VARS [ "mode" ]== "descargar" ){ include  "config.inc.php" ; conectar (); $tabla = "url" ...
  #1 (permalink)  
Antiguo 01/05/2003, 06:25
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 15 años, 9 meses
Puntos: 54
Evitar que te pillen las descargas

Tengo este código (funciona a la perfección):
Código PHP:
<?
if ($HTTP_POST_VARS["mode"]=="descargar"){
include 
"config.inc.php";
conectar();
$tabla="url";
// Subimos una unidad el contador de descargas
mysql_query("UPDATE $tabla SET total=total+1 WHERE id=$id");
$result=mysql_query("SELECT * from $tabla WHERE id=$id");
while(
$row=mysql_fetch_array($result)){
$url=$row["url"];
}
desconectar();
// Descargamos el archivo
header("Location: $url");
} else {
// Otras cosas
?>
Como dije, funciona todo OK. Ahora bien, ¿es posible que la gente pueda averiguar la URL de la descarga? Ahora mismo como podeis ver la saco de la base de datos y en ningún momento se muestra bajo Internet Explorer, salvo durante unas décimas de segundo cuando pulsas el botón y en la barra de estado sale: "Iniciando descarga desde http://www.mundodivx.com/xxx/archivo.zip"

Me interesa sobre todo saber si permanece oculta a ojos de usuarios de Internet Explorer 5-6, aunque sería interesante saber si funciona en Netscape y Opera. El objetivo es que la única forma de robarme el archivo sea linkear a mi página de descargas. Ej:
www.mundodivx.com/descargas.php?id=1

Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #2 (permalink)  
Antiguo 01/05/2003, 07:20
Avatar de ||Dj||  
Fecha de Ingreso: enero-2002
Mensajes: 2.349
Antigüedad: 15 años, 10 meses
Puntos: 1
Creo que lo mejor que esconder el path completo del archivo seria evitar que los archivos fueran publicos y asignarles los permisos necesarios para descargarlos en tu script via chmod.

A ver que dicen los que saben.

Un saludo.
  #3 (permalink)  
Antiguo 01/05/2003, 09:30
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 15 años, 9 meses
Puntos: 54
El problema es que no tengo acceso al chmod, tendría que ser todo con PHP. El problema es que sale la url en la barra de estado durante unas décimas de segundo, y si el servidor tarda en responder pues varios segundos. Me gustaria averiguar si sale en algún otro lado más y cómo solucionarlo con PHP.
Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #4 (permalink)  
Antiguo 01/05/2003, 09:36
Avatar de ||Dj||  
Fecha de Ingreso: enero-2002
Mensajes: 2.349
Antigüedad: 15 años, 10 meses
Puntos: 1
http://www.php.net/manual/es/function.chmod.php
  #5 (permalink)  
Antiguo 01/05/2003, 11:36
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Creo que lo que buscas es tener un script en php que "lea" el archivo (segun ID), y que te entregue el contenido para descargar, sin necesidad de que se sepa la direccion...

No estoy seguro como se hace, pero es algo con esta logica:

1.- Recibes la solicitud via URL (www.tusitio.com/descargas.php?ID=1)

2.- En tu script revisas tu BD para saber que el ID=1 corresponde a "archivos/musica.avi"

3.- Te "traes" el archivo a una funcion (Aqui es donde no estoy seguro si es con fopen, readfile, o que)

4.- Haces que tu funcion devuelva el contenido del archivo

5.- Configuras la salida para que sea "download/binary" en lugar de "text/html"


Bueno, no es algo que haya hecho, pero la logica me dice que esto debería ser posible...

Veamos si hay alguien que realmente sepa como hacer estas cosas... solo estoy cambiando la orientación de las respuestas.

Saludos!
__________________
Manoloweb
  #6 (permalink)  
Antiguo 01/05/2003, 12:00
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 16 años, 4 meses
Puntos: 9
mmm, otra sugerencia que haria es poner una serie de frames o iframes para descargar el archivo, no se como este eso.
  #7 (permalink)  
Antiguo 01/05/2003, 14:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Debes de leer el archivo del sistema de archivos del servidor .. via readfile() por ejemplo (que lo lee y lo entrega al buffer de salida) .. Previo a esto le envias las cabeceras HTTP para inciar la descarga (en varias FAQ's están ..)

Y sobre todo .. SUBE tus archivos ARRIBA de tu /www/ o /public_hmtl/ o como lo llame en tu servicio de hosting al "document_root". Eso si trabajas en servicios de hosting pagados .. veras q al entrar por FTP tienes tu /cgi-bin .. /algo /www .. siendo en www donde metes tus páginas HTML/PHP .. Create un directorio y metes ahí tus archivos .. así no quedarán accesibles via http://www.tusitio.tal/archivo.tal

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 01/05/2003, 16:47
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 15 años, 9 meses
Puntos: 54
Umm... lo que pasa es que mi host solo tiene la carpeta /www
Lo que puedo hacer es meter las descargas en /www/nombre_raro_y_largo_de_una_carpeta_que_a_nadie_se_ le_ocurra/archivo.zip y luego hacer los header esos
Miraré a ver si encuentro la FAQ y si no vuelvo por aquí
Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #9 (permalink)  
Antiguo 01/05/2003, 17:14
Avatar de mdk
mdk
 
Fecha de Ingreso: noviembre-2002
Mensajes: 531
Antigüedad: 15 años, 1 mes
Puntos: 11
Creo haber visto un script x ahi ke lo ke hacia es ke si tu haces un paso de variables tipo archivo.php?variable=tal te la pasaba via url asi archivo.php/variable/tal o algo parecido, el tema seria hacer ke los archivos de descarga ke mostrara esa falsa url, pero en realidad usara la otra.
__________________
SoY Lo Ke VeS iNKLuSo KuAnDo No Me VeS ;)
  #10 (permalink)  
Antiguo 01/05/2003, 17:37
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 15 años, 9 meses
Puntos: 54
Me he atascado, no se como enviar al navegador el resultado de readfile()
Código PHP:
<?
// Distintas funciones para obterner la url relativa, guardada como $url
header("Content-Type: download/binary"); 
// ¿Y AHORA QUÉ?
?>
Espero que podais ayudarme
Por cierto mdk ese script sería ideal para desconcertar más a los lammers, aunque si consigo lo que estoy pretendiendo no me haria falta, de todas formas si lo pillas dejalo por aquí
Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #11 (permalink)  
Antiguo 01/05/2003, 20:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Usa readfile() .. y ten cuidado con esa cabecera HTTP .. no todas son interpretadas igual por todos los navegadores ... Te recomiendo que uses algo tipo:

Código PHP:
<?
// Distintas funciones para obterner la url relativa, guardada como $url
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$el_nombre_que_quieras_darle_al_archivo");
readfile("$tu_archivo_con_la_ruta_completa_absoluta);

?>
El nombre que le das al archivo cuando lo descargas lo defines en en la cabecera HTTP conten-disposition .. Puede ser el mismo nombre que tengas en tu BD .. o incluso alguno "contante" ..

Pero, pruebalo con varios navegadores diferentes .. no todos responden igual a esas cabeceras ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 02/05/2003, 07:30
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 15 años, 9 meses
Puntos: 54
Saludos
Algo hace: pongo en filename el nombre del archivo con la extensión, y en readfile la url relativa. Funciona, pero empezamos con los errores:
- Bajo Opera 7 funciona Ok tanto la opción abrir como guardar.
- Bajo Netscape 7 considera que el archivo es .PHP y me la guarda como .PHP, y la de abrir ni siquiera me deja.
- Bajo Internet Explorer 6 si le doy a guardar lo hace bien, y si le doy a abrir me sale dos veces el cuadro de diálogo antes de abrirlo bien.
¿Será cuestión de cambiar los header? Con Download/binary pasa igual
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.

Última edición por ferny; 02/05/2003 a las 07:35
  #13 (permalink)  
Antiguo 02/05/2003, 11:40
Avatar de sdf23  
Fecha de Ingreso: diciembre-2002
Mensajes: 297
Antigüedad: 15 años
Puntos: 0
En el explorer 6 cada que le das abrir te sale 2 veces siendo caulquier archivo creo que por seguridad
__________________

la vida es bella cuando no es culera
  #14 (permalink)  
Antiguo 02/05/2003, 11:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. ferny .. estas sufriendo los problemas de la NO standarización de los navegadores ..

La mejor solución es que "identifiques" primero que navegador está en el Cliente y de ahí le "tires" las cabeceras HTTP adecuadas para cada uno .. Pues cada navegador "entiende" de una manera las cabeceras que le indican que el archivo ha de ser para "descargar" y otros datos del archivo ..

Chequea este sitio:
http://forums.devshed.com/showthread.php?threadid=30809

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 02/05/2003, 16:28
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 15 años, 9 meses
Puntos: 54
Cita:
Mensaje Original por sdf23
En el explorer 6 cada que le das abrir te sale 2 veces siendo caulquier archivo creo que por seguridad
Que va, jamás me lo ha hecho hasta hoy al probar la función...
Me da que voy a dejarlo como lo tenia, quizá ponga un nombre largo de carpeta pero en serio, da igual, lo dejo. Prefiero algo estándar...
Gracias a todos los que respondieron por intentarlo.
Un saludo
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #16 (permalink)  
Antiguo 25/11/2003, 20:55
Avatar de philipppe  
Fecha de Ingreso: marzo-2002
Ubicación: Uruguay
Mensajes: 706
Antigüedad: 15 años, 8 meses
Puntos: 0
en mozilla, al descargarlo, con la forma que tenés, se ve completa la dirección
__________________
Plugin de AdSense para Wordpress: http://adsensei.org
  #17 (permalink)  
Antiguo 05/12/2003, 21:56
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Mira esto

No se si está opcion mia sea correcta pero ...:
Código PHP:
<a href="downloads.php?id=descarga1" onmouseover="status=Nombre de Descarga'; return true" onmouseout="status=''">Descarga 1</a
lo podrías hacer de esta forma

Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 05/12/2003 a las 21:59
  #18 (permalink)  
Antiguo 05/12/2003, 22:44
 
Fecha de Ingreso: noviembre-2003
Ubicación: (LF).Santiago - Chile
Mensajes: 69
Antigüedad: 14 años
Puntos: 0
esta es mi solucion, al hacer click en el enlace se abre una nueva ventana, esta la del ejemplo:

ventana.php
Código PHP:
<html>
<head>
<script language="Javascript">
<!--
window.resizeTo(1,1);
window.moveTo(screen.width,screen.heigth);
//-->
</script>
<body>
</body>
</html>
<?
/* recibes por URL el ID (o nombre) del archivo en cuestion
    lo buscas en tu BD (si tienes) y redireccionas a la URL
    en donde se encuentra el archivo, como esta es una ventana
    nueva q el usuario jamas verá no sabra de donde lo está bajando */
$url="Location: h**p://www.tusitio.com/archivo.exe"
header ("$url");
?>
esto te puede servir pq en ninguna parte se vera la URL

salu2
  #19 (permalink)  
Antiguo 10/12/2003, 18:25
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Estuve revisando y ...

Hola:
Estuve revisando tu POST y me interesa saber como puedo hacer para contar las descargas. La estructura de mi tabla en MySQL es:
Código PHP:
CREATE TABLE `downloads` (
  `
idbigint(5unsigned NOT NULL auto_increment,
  `
titlevarchar(150NOT NULL default '',
  `
imagevarchar(100NOT NULL default '',
  `
descripcionvarchar(250NOT NULL default '',
  `
dir_downloadvarchar(250NOT NULL default '',
  `
authorvarchar(150NOT NULL default '',
  `
authormailvarchar(250NOT NULL default '',
  `
datedate NOT NULL default '0000-00-00',
  `
sizevarchar(100) default NULL,
  `
publishint(2unsigned NOT NULL default '0',
  `
countint(11NOT NULL default '0',
  
PRIMARY KEY  (`id`),
  
UNIQUE KEY `id` (`id`)
TYPE=MyISAM 
__________________
Ing. Reynier Pérez Mira
  #20 (permalink)  
Antiguo 10/12/2003, 18:31
 
Fecha de Ingreso: noviembre-2003
Ubicación: (LF).Santiago - Chile
Mensajes: 69
Antigüedad: 14 años
Puntos: 0
con una SQL pos master

update downloads set count=count+1 where id='$id_archivo'

eso es todo...salu2
  #21 (permalink)  
Antiguo 10/12/2003, 19:31
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Espero te sirva

http://www.copypastes.com/articulos/...?idArticulo=75
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
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 17:27.