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).