Foros del Web » Programando para Internet » PHP »

Acceso archivos restringido

Estas en el tema de Acceso archivos restringido en el foro de PHP en Foros del Web. Feliz Navidad anticipada a todos! Llevo unos días intentado proteger archivos de mi web mediante sesiones. Puedo ocultar los enlaces, pero una vez visitados por ...
  #1 (permalink)  
Antiguo 20/12/2005, 12:17
Avatar de pituzo  
Fecha de Ingreso: octubre-2004
Ubicación: Malaga
Mensajes: 34
Antigüedad: 13 años, 1 mes
Puntos: 0
Pregunta Acceso archivos restringido

Feliz Navidad anticipada a todos!

Llevo unos días intentado proteger archivos de mi web mediante sesiones. Puedo ocultar los enlaces, pero una vez visitados por un usuario identificado queda almacenada la url del archivo en ese equipo y puede accederse por otra persona posteriormente aún sin haber iniciado una sesión.

Por tanto me vale tanto una solución para que no se almacene la url del archivo como para impedir accesos no autorizados usando sesiones PHP.

Espero que puedan ayudarme.

Gracias.
  #2 (permalink)  
Antiguo 20/12/2005, 12:23
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Comienza explicando como manejas las sesiones, es decir, como las tienes configuradas en php.ini (apartado [SESSION]), que funciones usas para manejar las sesiones en tus scripts, que valor tiene register_globals en php.ini.
A que te refieres con proteger archivos? archivos para descarga? o los scripts php?
  #3 (permalink)  
Antiguo 20/12/2005, 12:35
Avatar de pituzo  
Fecha de Ingreso: octubre-2004
Ubicación: Malaga
Mensajes: 34
Antigüedad: 13 años, 1 mes
Puntos: 0
De la configuración no tengo ni idea, miraré a ver qué puedo ver en la información del servidor donde tengo el hosting.

En cuanto al tipo de archivos me refiero a archivos para descarga (video, pdf, doc...)

Siento no haberme explicado bien antes.
  #4 (permalink)  
Antiguo 20/12/2005, 12:38
Avatar de pituzo  
Fecha de Ingreso: octubre-2004
Ubicación: Malaga
Mensajes: 34
Antigüedad: 13 años, 1 mes
Puntos: 0
En cuanto a qué funciones uso en mis scripts (estoy lento, lo siento) uso session_start() y session_register() para usar un registro de sesión para saber si está identificado o no.
  #5 (permalink)  
Antiguo 20/12/2005, 14:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por pituzo
En cuanto a qué funciones uso en mis scripts (estoy lento, lo siento) uso session_start() y session_register() para usar un registro de sesión para saber si está identificado o no.
NO, no uses session_register() ese método es obsoleto e inseguro.

Para trabajar con sesiones revisa estas FAQ's:
http://www.forosdelweb.com/showpost....&postcount=129

Para proteger un directorio que contenga archivos de todo tipo .. tambien puedes usar autentificación HTTP:

http://www.juque.cl/weblog/2004/12/0...p-con-php.html

Pero .. por supuesto es más "usable" aplicar sesiones para todo el proceso. Esto te obligará a crear scripts que "llamen" a tus archivos .. scripts .php que harán:

1) validar a tu usuario por sesiones
2) leer el archivo de su ubicación física
3) preparar las cabeceras HTTP según el tipo de archivo a enviar.
4) entregar el archivo.


El punto 3 lo puedes hacer con header() y 2/4 se puede hacer con la función readfile()

Revisa los ejemplos de:
www.php.net/header

Un saludo,
  #6 (permalink)  
Antiguo 20/12/2005, 14:53
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Nosé si Cluster lo mencionó, pero es mas seguro colocar los archivos a descargar fuera del documentroot, si uno no desea que cualquiera lo descarque.
  #7 (permalink)  
Antiguo 20/12/2005, 15:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por claudiovega
Nosé si Cluster lo mencionó, pero es mas seguro colocar los archivos a descargar fuera del documentroot, si uno no desea que cualquiera lo descarque.
Se me pasó hacer mención al tema aquí .. (aunque suelo andar "predicando" eso mismo normalmente).

Gracias por la acotación.

Un saludo,
  #8 (permalink)  
Antiguo 20/12/2005, 15:15
 
Fecha de Ingreso: febrero-2005
Mensajes: 187
Antigüedad: 12 años, 10 meses
Puntos: 2
Porque no obligas la descarga en vez de hacer un link al archivo????

mira este codigo, asi no te quedaria la url guardada en tu browser.

<?php

$id = "archivo.doc";
$enlace = $path_a_tu_doc."/".$id;
header ("Content-Disposition: attachment; filename=".$id."\n\n");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($enlace));
readfile($enlace);

?>
__________________
___________________________
Hosting y Dominios en colombia
Blog de Cubica
  #9 (permalink)  
Antiguo 21/12/2005, 03:41
Avatar de pituzo  
Fecha de Ingreso: octubre-2004
Ubicación: Malaga
Mensajes: 34
Antigüedad: 13 años, 1 mes
Puntos: 0
jossmorenn, el código que me has sugerido me funciona a veces. Me explico: lo he probado en local en el servidor que tengo instalado y lo que creo que ocurre cuando no funciona es que copia el archivo a la carpeta temporal de windows y luego no lo encuentra. Querría saber si hay forma de solucionar eso ¿o esto no ocurrirá cuando lo suba al servidor?

Gracias a todos por sus respuestas.
  #10 (permalink)  
Antiguo 21/12/2005, 06:00
Avatar de pituzo  
Fecha de Ingreso: octubre-2004
Ubicación: Malaga
Mensajes: 34
Antigüedad: 13 años, 1 mes
Puntos: 0
Se me ha olvidado comentar que ese error solo ocurre cuando elegimos la opción de "Abrir", al guardarlo sí se hace correctamente.
  #11 (permalink)  
Antiguo 21/12/2005, 09:04
Avatar de pituzo  
Fecha de Ingreso: octubre-2004
Ubicación: Malaga
Mensajes: 34
Antigüedad: 13 años, 1 mes
Puntos: 0
Solucionado!!

Para que este hilo quede completo comento que la solución la encontré en Solución a problemas de headers:

Simplemente incluyendo estas otras cabeceras
Código PHP:
Header("Accept-Ranges: bytes");
Header("Expires: 0");
Header("Cache-Control: private"); 
Con lo que me ha quedado:
Código PHP:
   // $nombre es el nombre, con extensión, con el que se guarda al descargar.
   
$enlace "../ficheros/".$fichero
   
header ("Content-Disposition: attachment; filename=".$nombre."\n\n"); 
   
header ("Content-Type: application/octet-stream");
   
header ("Content-Length: ".filesize($enlace));
   
header("Accept-Ranges: bytes");
   
header("Expires: 0");
   
header("Cache-Control: private");
   
readfile($enlace);
   exit; 
Eso es todo.

Última edición por pituzo; 21/12/2005 a las 09:12
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 19:57.