Bloquear acceso a directorios mediante reglas de reescritura de Apache

Si nuestra aplicación web contiene directorios, dependiendo la configuración de Apache, el contenido de los mismos podría ser accedido conociendo la URL completa al archivo. Ya sabemos evitar que los buscadores indexen páginas de nuestro sitio y ahora vamos a ser un poco más estrictos, no permitiendo acceder a ciertos directorios por web mediante el módulo rewrite de Apache.

Activar el módulo rewrite y permitir htaccess en directorios del VirtualHost

  1. En la ubicación donde instalamos Apache, abrir con un editor de textos el archivo: conf\httpd.conf
  2. Descomentar la línea: LoadModule rewrite_module modules/mod_rewrite.so
  3. En el VirtualHost correspondiente, dentro de la etiqueta Directory establecer: AllowOverride All
  4. Reiniciar el servicio de apache

Proteger directorios

  1. En la ubicación donde se encuentran los directorios a proteger, crear un archivo .htaccess
  2. Abrir este archivo con un editor de textos e indicar en su contenido:
 Options -Indexes
 RewriteEngine on
 RewriteCond %{REQUEST_URI} ^.*/<DIRECTORY>/.*$
 RewriteRule .*$ <FORBIDDEN_URL>

donde DIRECTORY es el directorio que deseamos proteger para que no pueda ser accedido y FORBIDDEN_URL es una url a la cual redirigir cuando se intente acceder a este directorio por web. No hace falta decir que:

  • se pueden bloquear todos los directorios que deseemos, incluso especificando subdirectorios, agregando más líneas de RewriteCond debajo de la presentada
  • los directorios no especificados podrán ser accedidos.

Ejemplo: Suponiendo que tenemos un blog en http://myblogtest y no queremos que se permita el acceso a los archivos de log contenidos en http://myblogtest/archive/logs, creamos el archivo .htaccess en http://myblogtest:

 Options -Indexes
 RewriteEngine on
 RewriteCond %{REQUEST_URI} ^.*/archive/logs/.*$
 RewriteRule .*$ http://myblogtest/forbidden.html

De esta manera se podrá acceder a http://myblogtest/archive/file1.zip, pero cuando intentemos http://myblogtest/archive/logs/process1.log automáticamente redireccionará a http://myblogtest/forbidden.html

Alternativamente podemos querer indicar solamente los directorios a los cuales permitimos el acceso web. Entonces el contenido del .htaccess es el siguiente:

 Options -Indexes
 RewriteEngine on
 RewriteCond %{REQUEST_URI} !^.*/<DIRECTORY>/.*$
 RewriteRule .*$ <FORBIDDEN_URL>

donde DIRECTORY es el directorio al que permitimos el acceso y FORBIDDEN_URL es una url a la cual redirigir cuando se intente acceder por web a cualquier directorio que NO sea el indicado.

Tagged with: , ,
Publicado en Aplicaciones