Fecha de publicación: Vie, 07/06/2019 - 15:05

 

Un problema recurrente de privacidad en aplicaciones web es el despliegue de archivos y carpetas de los cuales está compuesto una aplicación, y muchas veces estas carpetas pueden contener información sensible como datos de configuración, archivos de configuración del repositorio, lista de usuarios, documentos pdf que son generados y almacenados en el mismo servidor y que en teoría son accesibles previa autenticación o incluso copias de seguridad de bases de datos, que desde ya es una mala práctica de seguridad.

La realidad nos muestra que hay carpetas, archivos expuestos sin restricción, esto debido a que esta configuración en servidores Apache viene habilitado por defecto, razón por la cual es importante conocer esta configuración y deshabilitarla. El servidor Nginx tiene deshabilitado por defecto la funcionalidad del listado de directorio.

Esto también ocurre en servicios de hosting para nuestros sitios web. Si no configuramos adecuadamente el hosting cualquier visitante accederá sin restricción al listado de directorios y archivos almacenados en el hosting y en el peor de los escenarios esta información visible a cualquier visitante que podría comprometer la seguridad de nuestro sitio web, como ejemplo CPanel.

Ejemplo. Listado de directorio (Index Of) Habilitado

Index Of habilitado

 

Deshabilitar Index Of en servidores Apache

Las siguientes configuraciones fueron realizadas en un servidor Debian 9, Apache 2.4 y usuario con privilegios sudo. Dependiendo del caso puede elegir una de las siguientes opciones para deshabilitar el listado de directorio.

1. Deshabilitar el módulo autoindex

Es el método más efectivo, pero se tiene que hacer un análisis previo para aplicarlo, ya que deshabilita esta funcionalidad a nivel global, es decir, si se quiere compartir archivos por HTTP (No recomendado)  ya no se podría hacer, y los cambios afectarían a todas las aplicaciones bajo el servidor.

$ sudo a2dismod autoindex

Después de ejecutar se mostrará el mensaje de advertencia y se tiene que responder con la siguiente frase:

To continue type in the phrase 'Yes, do as I say!' or retry by passing '-f': Yes, do as I say!

Reiniciar el servidor

$ sudo systemctl restart apache2.service

 2. Deshabilitar por archivo de configuración del sitio

Este método es el recomendable, ya que permite deshabilitar esta funcionalidad solo para el sitio en cuestión. Por ejemplo si se tiene el sitio www.sitio-de-prueba.com con el archivo de configuración (virtualhost) `sitio-de-prueba.conf`. Agregar en el archivo la siguiente directiva:

<VirtualHost *:80>

......

<Directory /var/www/sitio-de-prueba>
    Options -Indexes
</Directory>

.......

</VirtualHost>

Guardar y recargar la configuración.

$ sudo systemctl reload apache2.service

 3.  Deshabilitar a través del archivo .htaccess 

Es una alternativa similar al archivo de configuración y se tiene modificar o crear dependiendo del caso el archivo .htaccess y agregar:

Options -Indexes

 Guardar el archivo y reiniciar el servidor.

$ sudo systemctl restart apache2.service

El resultado de aplicar una de las configuraciones anteriores, será la restricción de listar archivos y carpetas.

Index Of Deshabilitado

Deshabilitar Index Of en Nginx

Por defecto en Nginx esta configuración viene deshabilitado, no es necesario realizar configuraciones adicionales.

 

Deshabilitar listado de directorio (Index Of) en CPanel

Para deshabilitar la configuración de listado de directorios de nuestro hosting se pueden aplicar las siguientes opciones:

A. Desde el cPanel

1. Accedemos al panel de control (cPanel) y buscamos el menú de opciones Herramientas Avanzadas.

index1

2. Entramos en la sección Index Manager donde se nos mostrará un árbol con todos los directorios de nuestra web.
 

index2


3. Navegamos hasta el directorio que deseemos proteger. Para entrar en los directorios hay que hacer click en el icono que está a la izquierda del nombre de la carpeta. Cuando encontremos la carpeta que deseamos proteger hacemos click en el nombre de la misma donde podemos marcar la opción No Indexar.

index3

B. Desde el archivo .htaccess

1. En la carpeta raíz o carpeta específica crear el archivo e introduzca la siguiente línea de código

Options -Indexes

2. También se puede evitar que se listen unos determinados archivos en concreto según su extensión. Por ejemplo, para evitar que se listen archivos de extensión .php y .html escriba:

IndexIgnore *.php *.html

3. Este método sirve para que se listen los directorios pero haciendo que estos aparezcan en blanco. De esta forma cualquier tipo de fichero no se mostrará a la hora de acceder a su correspondiente carpeta:

IndexIngnore *

C. Desde un archivo index en blanco

Esta solución es sencilla, solo se debe crear un documento en blanco llamado index.html (o index.php) para evitar el listado de los archivos cuando se acceda al directorio.

El problema de este método es que se debe añadir un archivo index en blanco en cada uno de los directorios en los que no se quiere mostrar los archivos.