PHP - Controlar acceso a archivos

 
Vista:

Controlar acceso a archivos

Publicado por J.R. (3 intervenciones) el 10/12/2007 17:19:14
Hola! tengo una pagina en la que los usuarios se registran con su nombre y contraseña(en un formulario de login que he hecho), para poder subir anexos usando move_uploaded_file (pueden subir doc, pdf.... lo que sea).

Usando las variables de sesion de PHP controlo si un usuario esta registrado o no. Ahora bien,¿cómo puedo controlar que un usuario no pueda ver los anexos que ha subido hasta que no se haya registrado?

Por ejemplo,lo que no quiero es que un usuario anonimo meta la URL completa de un archivo.doc y pueda verlo sin haberse registrado.

Por favor, ayuda, es algo urgente! Gracias de antemano.
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Controlar acceso a archivos

Publicado por Diego Romero (1450 intervenciones) el 10/12/2007 21:30:57
Afortunadamente para ti yo tenía un problema similar aunque no con usuarios sino con ciertas personas que enlazaban mis archivos descargables directamente desde mi página, cosa que yo no quiero que puedan hacer sin antes ver la documentación en línea de esos archivos. O sea, lo que técnicamente se llama "evitar el leeching".

Aquí te muestro un ejemplo de cómo podrías hacerlo.

<?php
$carpeta = "archivos/"
$file = @$_GET['file'];
if (!empty($file)) {
if (file_exists($carpeta.$file)) {
header("Content-Transfer-Encoding: binary");
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=".$file);
header("Content-Length: ".filesize($carpeta.$file));
readfile($carpeta.$file);
}
else
{ header("Location: ".$_SERVER["SERVER_URL"]); }
}
else { header("Location: ".$_SERVER["SERVER_URL"]); }
?>

Este script guárdalo con un nombre representativo, digamos "bajar.php" y se usa así:

http://www.example.com/bajar.php?file=nombredelarchivoabajar.doc

La variable $carpeta tiene el path hacia el directorio donde están los archivos, se toma el parámetro $_GET de la URL, se comprueba que no esté vacía, se comprueba si el archivo realmente existe en el directorio de archivos para bajar, se envian las cabeceras que le dicen al navegador que ese archivo lo debe descargar en disco y no que lo muestre en el propio navegador, finalmente se lee el archivo enviándoselo directamente al navegador (lo que inicia la trasferencia) como rastra de bytes.
Si el parámetro está vacío se redirecciona el visitante al index del sitio, si el archivo no existe también.

Para tu caso, antes de todo esto podrías poner tu código para validar que el usario que invoca este script está logueado.

Enjoy :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Controlar acceso a archivos

Publicado por J.R. (3 intervenciones) el 11/12/2007 09:55:01
Hola Diego! Gracias por tu rápida respuesta.

Voy a probar lo que me dices, creo que es justo lo que necesito.

Una vez mas, muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar