Foros del Web » Programando para Internet » PHP »

Proteger archivos para descarga

Estas en el tema de Proteger archivos para descarga en el foro de PHP en Foros del Web. Hola Maestros: Quiero proteger unos archivos para descargar, he leido por Cluster: "que se trata de colocar tus archivos fuera del "document root" de tu ...
  #1 (permalink)  
Antiguo 30/03/2005, 11:57
Avatar de kco
kco
 
Fecha de Ingreso: septiembre-2001
Mensajes: 249
Antigüedad: 16 años, 2 meses
Puntos: 0
Proteger archivos para descarga

Hola Maestros:

Quiero proteger unos archivos para descargar, he leido por Cluster:

"que se trata de colocar tus archivos fuera del "document root" de tu servidor HTTP .. es decir .. para que no queden al alcance de una llamada tipo: http://www.tal.tal/archivos .."

Hasta aqui no hay problema.

Pero lo que no se es como despues referenciarme a esos archivos.

Un abrazo y muchas gracias de un PHPero+
kco
__________________
"No tengas miedo de ir despacio, teme quedarte quieto."
  #2 (permalink)  
Antiguo 30/03/2005, 12:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Con header() y readfile() .. indicado para readfile() la ruta absoluta del archivo.

más info en la documentación de:
www.php.net/header
www.php.ne/readfile
(tienes ejemplos ahí)

Se trata de vía Header() indicar al navegador (cliente mejor dicho) que los datos que vas a enviar son para descargar ("attachment") y con readfile() lees el archivo de su ubicación física en el servidor (con ruta absoluta al mismo) y lo entrega al buffer de salida de PHP ..

Un saludo,
  #3 (permalink)  
Antiguo 30/03/2005, 15:10
Avatar de kco
kco
 
Fecha de Ingreso: septiembre-2001
Mensajes: 249
Antigüedad: 16 años, 2 meses
Puntos: 0
Gracias Cluster

Pero el problema es que no se como referirme a una imagen que este fuera del "document root"

En mi caso por encima del directorio httpdocs

Si el dominio apunta a este directorio, si hubiera una imagen que se llama image.jpg y el dominio es dom.es la ruta seria
www.dom.es/image.jpg

pero si esta encima del "document root" no se como es la ruta absoluta

Muchas gracias de un PHPero+
kco
__________________
"No tengas miedo de ir despacio, teme quedarte quieto."
  #4 (permalink)  
Antiguo 30/03/2005, 15:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Esa ruta absoluta .. la que está ubicado tu sito en ese servidor la puedes ver en:

$_SERVER['DOCUMENT_ROOT']
ahí te puedes hacer una idea por donde anda tu sitio en el servidor ..

No sé que servicio de hosting o servidor usas própio (ni S.O. del mismo) .. pero, lo "típico" para un servicio de hosting suele ser:

/ raiz del servidor (Linux)
/var/sitios/dom.es/public_html <-- aquí colocas tus páginas y todo lo que sea accesible vía HTTP (http://www.tal.tal/.....). Ese tal "public_html" suele ser donde apunta tu "DocumentRoot"
/var/sitios/dom.es/www
/var/sitios/dom.es/statics ...

Entrando por FTP con tu cuenta de FTP asignada .. sólo ves:
/public_html
/www
/statics
/mail

O cosas así .. Pero en realidad "cuelgan" desde por ejemplo "/var/sitios/tusito.com/"

Es ahí donde debes crear tu directorio .. fuera de tu "DocumentRoot" (que puede ser ese "public_html" pero todavía "dentro" de tu directorio asignado en ese servidor. Algunos servicios de hosting NO permiten eso y simplemente sólo accedes al "DocumentRoot" o sólo tienes permiso para acceder hasta ahí .. sin posibilidad de ver ni crear nada por encima. Otra cosa es que tu servidor esté bajo tu control .. ahí podras moverte por donde gustes.

Si usas un servicio de hosting . .y no conoces esa ruta .. también puedes consultar a tu proveedor ..

Un saludo,
  #5 (permalink)  
Antiguo 30/03/2005, 15:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Por cierto .. no sé si quedó claro (o me fuí por las ramas con la explicación) .. pero se trata de tener un script PHP que lea tu imagen y la entregue al navegador.

De esa forma .. tus llamadas a imagenes serán tipo:
<img src="ver_imagen.php?imagen=nose.jpg">

tu ver_imagen.php debería hacer algo tipo

Código PHP:
<?
header
("content-type: image/jpeg");
readfile('/var/sitios/nose.com/imagenes/'.$_GET['imagen']);
?>
por supuesto .. tendrás que validar esa variable para que no te hagan un "../archivo.tal" que podría ser peligroso, pero esa es la base...

Un saludo,
  #6 (permalink)  
Antiguo 31/03/2005, 11:29
Avatar de kco
kco
 
Fecha de Ingreso: septiembre-2001
Mensajes: 249
Antigüedad: 16 años, 2 meses
Puntos: 0
gracias Cluster lo voy a porbar y os cuento

un abrazo de un PHPero+
kco
__________________
"No tengas miedo de ir despacio, teme quedarte quieto."
  #7 (permalink)  
Antiguo 04/05/2005, 11:44
Avatar de kco
kco
 
Fecha de Ingreso: septiembre-2001
Mensajes: 249
Antigüedad: 16 años, 2 meses
Puntos: 0
Como mereferencio a la carpeta que he creado fuera del Document Root

Mi Document Root es:

/usr/local/psa/home/vhosts/dominio.com/httpdocs
En httpdocs es donde esta toda la web

AHORA he creado el directorio PRUEBA en:

/usr/local/psa/home/vhosts/dominio.com/PRUEBA

ahora no se como referenciarme a este directorio en el readfile()
Aunque suene raro no se como escribir la ruta para que mire dentro del directrio PUEBRA

Muchas gracias y un abrazo de PHPero+
kco
__________________
"No tengas miedo de ir despacio, teme quedarte quieto."
  #8 (permalink)  
Antiguo 04/05/2005, 12:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La ruta ha de ser completamente absoluta desde el raiz de tu servidor .. la cual la estas dando tu mismo:

(respetando mayusculas y minusculas ...):
Código PHP:
readfile("/usr/local/psa/home/vhosts/dominio.com/PRUEBA/nose.jpg"); 
Un saludo,
  #9 (permalink)  
Antiguo 04/05/2005, 13:49
Avatar de kco
kco
 
Fecha de Ingreso: septiembre-2001
Mensajes: 249
Antigüedad: 16 años, 2 meses
Puntos: 0
Gracias Cluster, pero yo con este codigo

Archivo Borrar5.php
<?php

// Enviaremos un PDF
header('Content-type: image/jpeg');

// Se va a llamar descarga.pdf
header('Content-Disposition: attachment; filename="flor.jpg"');

// La fuente del PDF se encuentra en original.pdf
readfile("/usr/local/psa/home/vhosts/dominio.com/PRUEBA/flor.jpg");

?>


Me da este error

<br />
<b>Warning</b>: readfile(): open_basedir restriction in effect. File(/usr/local/psa/home/vhosts/dominio.com/PRUEBA/flor.jpg) is not within the allowed path(s): (/usr/local/psa/home/vhosts/dominio.com/httpdocs:/tmp) in <b>/usr/local/psa/home/vhosts/dominio.com/httpdocs/borrar5.php</b> on line <b>10</b><br />
<br />
<b>Warning</b>: readfile(/usr/local/psa/home/vhosts/dominio.com/PRUEBA/flor.jpg): failed to open stream: Operation not permitted in <b>/usr/local/psa/home/vhosts/dominio.com/httpdocs/borrar5.php</b> on line <b>10</b><br />


Y si lo hago igual pero apuntando al directorio httpdocs (al Document Root) va perfectamente

Muchas gracias
kco
__________________
"No tengas miedo de ir despacio, teme quedarte quieto."
  #10 (permalink)  
Antiguo 04/05/2005, 13:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues ahí ya no puedes hacer nada ..

tu directiva "open_base_dir" apunta directamente a tu DocumentRoot (httdocs) .. así que a no ser que te contactes con tu proveedor y les hagas el comentario para que añadan esa ruta a su "open_base_dir" .. PHP no podrá acceder a dicha ruta.

Un saludo,
  #11 (permalink)  
Antiguo 05/05/2005, 12:36
Avatar de kco
kco
 
Fecha de Ingreso: septiembre-2001
Mensajes: 249
Antigüedad: 16 años, 2 meses
Puntos: 0
Gracias de nuevo Cluster.

Yo estoy controlando (intentando, aprediendo) un servidor dedicado por medio del PLESK lo que pasa es q no se como modificar el php.ini ya que no puedo acceder a el, me dice que permiso denegado y entro como administrador.

Sabeis algo sobre esto??

Muchas gracias y un abrazo de un PHPero+
kco
__________________
"No tengas miedo de ir despacio, teme quedarte quieto."
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 12:35.