Foros del Web » Programando para Internet » PHP »

Proteger ficheros

Estas en el tema de Proteger ficheros en el foro de PHP en Foros del Web. Hola a todos Llevo un rato intentando averiguar como puedo proteger los documentos word que tengo en un directorio, contra llamadas directas del tipo www.miservidor.com/carpeta/archivo.doc ...
  #1 (permalink)  
Antiguo 02/02/2007, 07:02
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Proteger ficheros

Hola a todos

Llevo un rato intentando averiguar como puedo proteger los documentos word que tengo en un directorio, contra llamadas directas del tipo www.miservidor.com/carpeta/archivo.doc, ya que deben abrirse desde un script que solicita autentificación...

No se si me explique bien...

¿alguna sugerencia?
  #2 (permalink)  
Antiguo 02/02/2007, 07:24
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: Proteger ficheros

Se supone que tienes un web en donde ves esos archivos o pones la ruta completa del archivo ?
  #3 (permalink)  
Antiguo 02/02/2007, 08:39
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Re: Proteger ficheros

A través del script pueden abrirse los archivos (en un área privada) sin mostrarse la url, pero lo que quiero es que aún sabiendo la url no puedan abrirse los *.doc si no es a través del script
  #4 (permalink)  
Antiguo 02/02/2007, 09:27
 
Fecha de Ingreso: diciembre-2003
Mensajes: 204
Antigüedad: 20 años, 4 meses
Puntos: 2
Re: Proteger ficheros

yo tenia el mismo problema que tu pero con pdfs. Lo soluciones gracias al htacces de apache. puse lo siguiente

Código:
<FilesMatch "\.pdf$">
    Order allow,deny
    Deny from all
    Allow from localhost
</FilesMatch>
Con eso obtenia que a los pdf de ese directorio solo se podia acceder desde localhost. Cuando queria un archivo, lo pasaba por un script que me validaba al usuario, y en caso de tener permiso para ver el archivo leia los contenidos de ese archivo, y mediante la funcion header le especificaba al navegador que tipo de documento le iba a mandar. Te pongo el codigo donde leo el fichero y hago lo de header (lo demas va a gusto de cada uno)

Código PHP:
$fichero file_get_contents("../../uploads/$documento->nombre");
header('Content-type: application/pdf');
echo 
$fichero
El problema es que solo sirve para un tipo de archivo, no para todos, pero bueno, como solo lo necesitaba para pdfs me sirvio, espero que a ti tambien te sirva...

Un saludo
  #5 (permalink)  
Antiguo 03/02/2007, 11:14
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Re: Proteger ficheros

Respuesta perfecta DaChux

Muchisimas gracias
  #6 (permalink)  
Antiguo 03/02/2007, 12:12
 
Fecha de Ingreso: agosto-2006
Mensajes: 78
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Proteger ficheros

Cita:
Iniciado por DaChux Ver Mensaje
yo tenia el mismo problema que tu pero con pdfs. Lo soluciones gracias al htacces de apache. puse lo siguiente

Código:
<FilesMatch "\.pdf$">
    Order allow,deny
    Deny from all
    Allow from localhost
</FilesMatch>
Hola, he utilizado tu sistema he creado un htacces en el directorio para que solo se puedan descargar en mi caso archivos .zip asi ;

<FilesMatch "\.zip$">
Order allow,deny
Deny from all
Allow from localhost
</FilesMatch>

Luego en la pagina de descarga le indicado esto ;

if ($HTTP_COOKIE_VARS['CODE_OK']!='1'){
$file='miarchivo.zip'; // Nombre del fichero
header ('Content-Disposition: attachment; filename='.$file.';' );
header ('Content-Type: application/force-download');
}

descargar.php ; (en el mismo directorio del fichero miarchivo.zip)

En donde el cookie_vars es un control conforme el usuario esta logeado,
luego le indico el nombre del archivo, lo he probado pero la pagina me
aparece en blanco y no baja ningun fichero, si me pudierais ayudar, gracias!

saludos
  #7 (permalink)  
Antiguo 03/02/2007, 12:19
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Re: Proteger ficheros

Prueba con estas cabeceras



header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$file.'"');
header ("Content-Length: ".filesize($file));
header("Pragma: no-cache");
header("Expires: 0");
readfile($file);
  #8 (permalink)  
Antiguo 03/02/2007, 12:31
 
Fecha de Ingreso: agosto-2006
Mensajes: 78
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Proteger ficheros

Cita:
Iniciado por Operadormail Ver Mensaje
Prueba con estas cabeceras



header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$file.'"');
header ("Content-Length: ".filesize($file));
header("Pragma: no-cache");
header("Expires: 0");
readfile($file);
Hola, gracias por tu ayuda, lo acabo de probar de nuevo pero me queda la pantalla del navegador vacia y no se me abre el "Guardar como" he mirado
que no fuera problema de bloqueo por parte de firewall pero todo esta bien en ese aspecto, el .htacces se que esta bien.

saludos
  #9 (permalink)  
Antiguo 03/02/2007, 12:36
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Re: Proteger ficheros

Mira el codigo fuente de la pagina que se te queda en blanco para saber si saca algun error que no se muestre por pantalla.

Prueba tambien a poner la ruta absoluta del fichero...

Es lo que se me ocurre, ya que a mi estas cabeceras me funcionan perfectamente
  #10 (permalink)  
Antiguo 03/02/2007, 12:52
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 3 meses
Puntos: 9
Re: Proteger ficheros

juanitovoy pon el codigo que estas usando
  #11 (permalink)  
Antiguo 03/02/2007, 12:58
 
Fecha de Ingreso: agosto-2006
Mensajes: 78
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Proteger ficheros

Cita:
Iniciado por Operadormail Ver Mensaje
Mira el codigo fuente de la pagina que se te queda en blanco para saber si saca algun error que no se muestre por pantalla.

Prueba tambien a poner la ruta absoluta del fichero...

Es lo que se me ocurre, ya que a mi estas cabeceras me funcionan perfectamente
Hola, se donde esta el error si quito el if, funciona perfectamente, pero claro no controlo el logeo del usuario ;

//if ($HTTP_COOKIE_VARS['CODE_OK']='1'){
$file='/download/miarchivo.zip'; // Nombre del fichero
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$file.'"');
header ("Content-Length: ".filesize($file));
header("Pragma: no-cache");
header("Expires: 0");
readfile($file);



Si pongo el If me da el siguiente error, indicar que antes me ponia la pantalla en blanco porque no entraba en el if, otro error que tenia pues en vez de !='1' debe ser ='1', ahora entra en el if, pero sale el error que indico ;

HTTP Error 403 - Prohibido

Saludos
  #12 (permalink)  
Antiguo 03/02/2007, 13:12
 
Fecha de Ingreso: agosto-2006
Mensajes: 78
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Proteger ficheros

Cita:
Iniciado por juanitovoy Ver Mensaje
Hola, se donde esta el error si quito el if, funciona perfectamente, pero claro no controlo el logeo del usuario ;

//if ($HTTP_COOKIE_VARS['CODE_OK']='1'){
$file='/download/miarchivo.zip'; // Nombre del fichero
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$file.'"');
header ("Content-Length: ".filesize($file));
header("Pragma: no-cache");
header("Expires: 0");
readfile($file);



Si pongo el If me da el siguiente error, indicar que antes me ponia la pantalla en blanco porque no entraba en el if, otro error que tenia pues en vez de !='1' debe ser ='1', ahora entra en el if, pero sale el error que indico ;

HTTP Error 403 - Prohibido

Saludos
Ok, aunque desde el primer instante quise revisarlo, he visto que era el firewall que bloqueaba el envio, el que me daba el error 403, ya que lo quite un momento y entonces me ha permitido bajar el fichero.

Pongo de nuevo el script que funciona perfectamente, para usuarios que les pase como a mi tambien, revisar el firewall os evitareis muucho tiempo

<?php
// Comprovamos que exista la cookie
if ($HTTP_COOKIE_VARS['CODE_OK']='1'){ //control logeo usuario
$file='miarchivo.zip'; // Nombre del fichero
header('Content-type: application/zip'); //tipo de fichero
header('Content-Disposition: attachment; filename="'.$file.'"');
header ("Content-Length: ".filesize($file));
header("Pragma: no-cache");
header("Expires: 0");
readfile($file);
}
?>

Gracias por tu ayuda Operadormail, 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 20:44.