Permisos de carpeta

Hola de nuevo Edyak:
Resulta que tengo este problema:
El sitio se va a dedicar a vender formularios pdf.
Estos formularios solo los puede bajar el que paga.
Si pagó puede bajarlos con la conocida rutina de php.
Pero resulta que para que la rutina de bajada sirva, la carpeta tiene que tener permiso de lectura publico. Pero si le doy este permiso, el usuario simplemente poniendo en la barra de navegación la dirección web puede entrar a la estructura de directorios.
¿Cómo puedo hacer para evitar eso y que al mismo tiempo funcione fopen, fread de php?
Para mi es un problemón, espero puedas ayudarme.
Gracias!
Saludos
Claudia
Espero me entiendas.

1 Respuesta

Respuesta
1
Tendrías que restringir el acceso a la carpeta mediante el archivo .htaccess o bien mediante un sistema de autentificación PHP. Necesitaría que me dijeras el Sistema Operativo, el servidor (Apache, IIS) y su versión y la versión de php que estás utilizando para poder orientarme.
Sistema Operativo Linux
El version del Apache, 1.3.33 (Unix)
Php version: 4.3.9
Gracias Ed!
Más pruebas
Ahora probé con
IndexIgnore *
En el htaccess.
Provoca lo que vas a ver en
www.agbocchi.hableweb.com/administrador
¿Cuál de estas ideas usarías tu?
Hola Edyak
Estuve haciendo los deberes y me puse a estudiar lo del .htaccess
Encontré una forma de proteger la carpeta con contraseña.
Mira, entra en:
www.agbocchi.hableweb.com/material
Veras que te pide usuario y contraseña-
Pero en realidad yo quiero algo más como esto:
www.elbiofernandez.edu.uy/material
¿Cómo se logra que salga este mensaje? ¿Tu sabes? ¿Cuál de los dos te parece más profesional?
REalmente me interesa mucho recibir tu orientación.
Gracias
Después, el vínculo a los enlaces lo tienes que hacer a un archivo php (<a href="./pdfhandler,php">). En ese archivo, debería ir un código tipo:
<?php
header(content-type: image/jpeg\ncache-control: no-store\n);
$dir = ../../imagelib/rome;
$dh = opendir($dir);
$contains = array();
while ($content = readdir($dh)) {
if (eregi(jpg$,$content)) {
array_push($contains,$content);
}
}
$which = rand(0,count($contains)-1);
$fname = $dir/$contains[$which];
$fh = fopen($fname,r);
$data = fread($fh,fi lesize($fname));
print ($data)
?>
No obstante, éste es para servir una imagen aleatoria, tendrás que modificarlo. Por otra parte, el envío de la cabecera 'header(content-type: pdf ... etcétera);', puede producir que los pdfs se abran en una ventana distinta, si no te gusta, elimina esa cabecera.
Ante todo, disculpa que no haya contestado antes. Bien, lo más fácil que puedes hacer, es poner los pdfs fuera del 'Document Root', normalmente ubicado en la subcarpeta del servidor apache 'htdocs'. Así los pdfs no tienen realmente una URL a la que se pueda acceder y solo se pueden obtener a través del script en PHP.
Por otra parte, si quieres modificar la página de error que aparece para que quede más profesional, puedes hacerlo en la subcarpeta 'error' de apache, editando el archivo HTTP_NOT_FOUND.html.var, HTTP_UNAUTHORIZED.html.var o HTTP_FORBIDDEN.html.var.
Otras opciones:
Para el método del htaccess, el servidor apache suele incluir el archivo htpasswd; lo puedes bajar de http://httpd.apache.org/ y el manual está en http://httpd.apache.org/docs/2.0/programs/htpasswd.html. Es importante que guardes el archivo con los usuarios y contraseñas en una carpeta que esté por debajo del 'Document Root', normalmente, la carpeta htdocs dentro de las carpetas de Apache.
Una vez decidas la ubicación del archivo de usuarios, tienes que dar de alta a los mismos mediante htpasswd. Por ejemplo, damos de alta al usuario claudia:
htpasswd -c /usr/local/etc/httpd/users claudia
El modificador -c sirve para crear un nuevo archivo y solo tienes que usarlo la primera vez. Una vez introduzcas este comando, te pedirá el password que quieres asociar al usuario.
Posteriormente, tendrías que hacer un archivo '.htaccess' con las siguientes lineas:
AuthName "pdfs restringidos"
AuthType Basic
AuthUserFile /usr/local/etc/httpd/users
Require valid-user
Valid-user le dice al servidor que cualquier usuario con password y contraseña puede acceder, pero puedes restringirlo más cambiandolo por:
Require user claudia alberto
O bien, puedes hacer grupos y requerir que pertenezca a un grupo:
require group usuarioautorizado
Puedes combinar también grupos con usuarios:
require group usuarioautorizado
require user claudia alberto
Para los grupos, necesitarás añadir la línea AuthGroupFile /usr/local/etc/httpd/grupo1.
Si el número de usuarios es muy grande, deberías usar archivos dbm en lugar de estos archivos de texto. Esto se hace habilitando en httpd.conf la directiva mod_auth_dbm.
También puedes modificar ese archivo .htaccess mediante php en el momento que te resulte necesario.
Esta rutina (htpasswd), puede ser llamada desde php para crear usuarios en el momento que sea necesario. Yo no domino php, pero puedes bajar sistemas de gestión de usuarios gratuitos de www.hotscripts.com.
Para el método de protección mediante PHP, si tienes más tiempo, puedes bajar, por ejemplo, dalbum, que es un script para gestión de colecciones de imágenes, y 'destriparlo' para ver como ejecuta otras aplicaciones (como imagemagick) y como gestiona los usuarios.
Tienes un tutorial bien explicado en:
http://www.wazzup.co.nz/tutorials/protect_pdf/index.php

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas