Inicio > Seguridad Informática > edyak > permisos de carpeta

permisos de carpeta

Experto:
Usuario:
Fecha: 24/11/2006
Valoración: (5,00 sobre 5) Categoría: Seguridad Informática
15/11/2006
claudiaviana, usuario preguntando en Seguridad Informática
Usuario
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 direccion web puede entrar a la estructura de directorios.
Como puedo hacer para evitar eso y que al mismo tiempo funcione fopen, fread de php?
Para mi es un problemon, espero puedas ayudarme.
Gracias!!
Saludos
Claudia
Espero me entiendas.
15/11/2006
claudiaviana, experto respondiendo en Seguridad Informática
Experto
Bueno, 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. Saludos.
15/11/2006
claudiaviana, usuario preguntando en Seguridad Informática
Usuario
Sistema Operativo Linux
El version del Apache, 1.3.33 (Unix)
Php version: 4.3.9
Gracias Ed!
23/11/2006
claudiaviana, usuario preguntando en Seguridad Informática
Usuario
Hola Edyak
estuve haciendo los deberes y me puse a estudiar lo del .htaccess
Encontre 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 mas como esto:
www.elbiofernandez.edu.uy/material
Como se logra que salga este mensaje? Tu sabes? Cual de los dos te parece mas profesional?
REalmente me interesa mucho recibir tu orientación.
Gracias
23/11/2006
claudiaviana, usuario preguntando en Seguridad Informática
Usuario
Mas pruebas
Ahora probe con
IndexIgnore *
en el htaccess.
Provoca lo que vas a ver en
www.agbocchi.hableweb.com/administrador

Cual de estas ideas usarias tu?
24/11/2006
claudiaviana, experto respondiendo en Seguridad Informática
Experto
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.
24/11/2006
claudiaviana, experto respondiendo en Seguridad Informática
Experto
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.
24/11/2006
claudiaviana, experto respondiendo en Seguridad Informática
Experto
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 imágen aleatoria, tendrás que modificarlo. Por otra parte, el envio 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.
24/11/2006
claudiaviana, experto respondiendo en Seguridad Informática
Experto
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
24/11/2006
claudiaviana, usuario preguntando en Seguridad Informática
Usuario
Excelente edyak! Valio la pena esperar esos pocos dias. Gracias
Enlaces patrocinados