Dic 07

Mover archivos confidenciales fuera del acceso público

Un desafío en Joomla! es el de asegurar que ciertos archivos que contengan información confidencial o sean ejecutables queden protegidos contra el acceso directo desde internet.

Hay varias maneras de proteger ese tipo de archivos, pero, la mayoría, no lo hace en optimas condiciones, sobre todo cuando el "factor humano" entra en juego. Teniendo que repasar el contenido de cada uno de los archivos en el espacio público, siendo estos protegidos contra el acceso directo "por código", el "factor sorpresa" en condiciones "standard" se pierde con gran facilidad; ya que, causalmente, usamos los mismos nombres de archivo o carpeta, los cuales, se instalan en las mismas rutas relativas al directorio raíz.


Apache.org mismo, recomienda encarecidamente que se evite alojar, dentro del mismo espacio público, los archivos susceptibles de ser explotados por alguna vulnerabilidad, así como aquellos que contengan datos confidenciales.

Joomla! es cada vez más robusto en ese sentido y se actualiza, previene e informa a sus usuarios para actuar contra las nuevas detecciónes de fallas con presteza; pero, quedan gran cantidad de extensiones pobremente programadas por terceros que podrían poner en jaque a todo nuestro servidor; ya que, si en un mismo espacio web, alojamos y permitimos el acceso tanto a archivos públicos como confidenciales.. un solo archivo vulnerable, expone al servidor entero. Los archivos que quedan fuera del espacio público, aunque sean vulnerables, no son explotables por "ataques via URL".. precisamente, por estar ubicados en una Zona Privada, fuera del alcance público "via URL".

Sugerencias

En este ejemplo, vamos a proteger el archivo configuration.php el cual es, posiblemente, el archivo más confidencial de toda la web. Para ello:

1. Mueve el archivo configuration.php a una ruta de acceso privado fuera de tu espacio público y renómbralo con el nombre que prefieras. En este ejemplo, lo vamos a renombrar a joomla.conf

2. Crea un nuevo archivo configuration.php que contenga solo el siguiente código:

Código: Seleccionar todo

 No incluyas líneas o espacios en blanco antes del inicio de la etiqueta "<?php" o después del final de la etiqueta, "?>". Tales líneas o espacios en blanco pueden provocarte el famoso error "headers already sent". Por ejemplo:

Código: Seleccionar todo

Warning: Cannot modify header information - headers already sent by (output started at /home/xxxxx/public_html/configuration.php:2) in /home/xxxxx/public_html/index.php on line 250

3. Asegúrate que el nuevo archivo de configuración no es escribible por nadie, de este modo, no podrá ser sobre-escrito por el com_config cuando se apliquen cambios en la configuración global de nuestra web.

4. Si necesitas cambiar la configuración global, hazlo manualmente desde el archivo que hemos reubicado y renombrado a joomla.conf.

Adaptarnos a las circunstancias

En el supuesto de que nuestra ruta absoluta al espacio web con acceso público fuera el siguiente:

Código: Seleccionar todo

/var/www/usuario/public_html

dirname( __FILE__ ) se encargaría de recoger ese dato.

Si, dentro de public_html, creamos la carpeta private_html

Código: Seleccionar todo

require( dirname( __FILE__ ) . '/private_html/joomla.conf' );

Indicaría una ruta válida apuntando a un archivo existente dentro de la "Zona Privada":

Código: Seleccionar todo

/var/www/usuario/public_html/private_html/joomla.conf

Si se sugiere de este modo, no quiere decir que no se pueda llevar a cabo de otras maneras. Esta, es la simple y a fin de cuentas lo que estamos haciendo es crear una "zona privada dentro de la pública"

Otro modo de proceder, por ejemplo, seria indicándolo de este modo:

Código: Seleccionar todo

require( '/var/www/usuario/private_html/joomla.conf');

Con lo cual, dentro de la "zona pública" no estamos creando un espacio privado, sino que, apatir de "/var/www/usuario" tenemos una carpeta "public_html" para el acceso público y otra llamada "private_html" para el acceso privado.

La carpeta privada, tanto si está en el espacio público como fuera de él, normalmente y generalizando, podría dejarse con permisos chmod 700, y, los archivos alojados en su interior con chmod 400; ademas, "via .htaccess" o, desde el servidor, por configuración de etiquetas "Directory".. se podría restringir el acceso, denegándolo a todo el mundo, menos, por ejemplo, a la IP del administrador.

Todo esto, como mínimo, requiere de trabajar con "propietario y grupo apropiados"; es decir, en otras circunstancias, los permisos chmod de archivo/carpeta, por funcionar como tocan; pero, con un propietario y grupo equivocado, no nos permitiría operar como deseamos.

Nota: Adicionalmente, con este método, se tendría que impedir, por configuración del servidor, el "mostrar errores"; ya que, junto al error, se podría mostrar,"dejando al descubierto", la ubicación de nuestros "archivos privados" (lo cual es un dato que no nos interesa facilitar).

Visto 8274 veces Modificado por última vez en Lunes, 26 Diciembre 2011 01:18
Freddy Rodriguez

Me apasiona la tecnología y el #Networking. Padawan aplicado en #SEO, Analítica web y Joomla!.

Sitio Web: www.joomla.cl

Últimos artículos del blog