Seguridad en Joomla utilizando .htaccess en servidores Linux/Apache

El servidor Apache posee opciones de configuración que están disponibles solamente para el administrador del server. Sin embargo, es posible reescribir algunas de las configuraciones por defecto creando y/o editando un archivo llamado .htaccess.

Me refiero en configuración, a la forma en que responde el servidor Apache, ante las peticiones de los visitantes, usuarios y bots. Ten en cuenta que no solo seres humanos ingresarán mediante un navegador a tu sitio. También pueden acceder a scanners que buscan direcciones de email, scripts que realizan visitas automáticas con algún fin determinado, robots de los motores de búsqueda, monitores de sistemas, y programas hechos por hackers para probar o explotar vulnerabilidades de nuestro sitio o en el servidor.


El .htaccess es simplemente un archivo de texto ASCII que se ubica en el directorio raiz de tu sitio o en un subdirectorio dentro de él. Este archivo puede ser creado y editado con cualquier editor de texto (bloc de notas, notepad), y luego subido al directorio para el cual se desea modificar las configuraciones por defecto de Apache. Es muy importante el .htaccess, ya que con él podemos dotar de seguridad a nuestro sistema.
Luego de crear y editar el archivo debe ser subido (via FTP por ejemplo) en modo ASCII, aplicándole un chmod 644

.htaccess de Joomla

El sistema Joomla ya viene con un archivo htaccess.txt que hay que renombrarlo para que funcione como .htaccess. Si bien, la finalidad de este archivo en Joomla sirve exclusivamente para el SEF (Reescritura de las URL para la optimización en motores de búsqueda), el mismo puede ser utilizado también para otros propósitos.
El aspecto del .htaccess que viene con Joomla es el siguiente:
##
# @version $Id: htaccess.txt 1005 2005-11-13 17:33:59Z stingrey $
# @package Joomla
# @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
## Options +FollowSymLinks
#
# mod_rewrite in use
#
RewriteEngine On
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update YourJoomlaDirectory (just / for root)
# RewriteBase /YourJoomlaDirectory
#
# Rules
#
RewriteCond %{REQUEST_FILENAME} !\.(jpg|jpeg|gif|png|css|js|pl|txt)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php
El .htaccess afecta al directorio donde está incluido y todos sus subdirectorios que hay dentro de este. La mayoría de los comandos en el .htaccess deben ser escritos en una sola linea.
IMPORTANTE: Ten en cuenta que todos los servidores están configurado de forma distinta, por lo cual algunas instrucciones pueden no funcionar, incluso hay servidores donde deshabilitan e impiden la utilización de .htaccess
A continuación, listo las posibilidades de utilización de este archivo .htaccess que tienen que ver con la seguridad del sistema u otras funcionalidades:

Mensajes de Error personalizados

En lugar de utilizar las páginas de error predeterminadas por el servidor, podés utilizar tus propios mensajes para ello con el .htaccess. La sintaxis es la siguiente:
ErrorDocument 404 /error404.php
ErrorDocument 403 /error403.php

Bloquear el acceso público a determinados archivos 

Con el siguiente código bloqueamos el acceso público desde el navegador hacia el archivo archivo.htm
order allow,deny
deny from all

Cambiar tu página de inicio por defecto

Normalmente, en la configuración de Apache suele estar este orden de páginas por defecto (en negrita):
#
# DirectoryIndex: Name of the file or files to use as a pre-written HTML
# directory index. Separate multiple entries with spaces.
#

DirectoryIndex index.htm, index.html, index.cgi, index.shtml, index.php

Utilizando el archivo .htaccess se puede especificar el nombre del archivo que debe entregar por defecto el servidor como índice del dominio, además de esto, puede darse un órden jerárquico para establecer cuál de los archivos debe tomarse primero, y cuáles siguen a este, en caso de no encontrarse.
Si por ejemplo, yo quiero utilizar una página por defecto que se llame por ejemplo joomla.html, en el archivo .htaccess voy a colocar la siguiente línea:
DirectoryIndex joomla.html
Esto hará que el servidor busque primero joomla.html. Si encuentra el archivo, lo mostrará. Si no la encuentra, enviará el error HTTP 404 (página no encontrada)
Para cambiar el orden de precedencia, listaremos luego del comando DirectoryIndex los archivos ordenados de izquierda a derecha, donde el archivo que esté en el extremo izquierdo será el primero que tomará el servidor, y el que se encuentre en el extremo derecho, será el último. Por ejemplo:
DirectoryIndex index.html index.php default.htm

Habilitar la exploración de directorios

Normalmente por razones de seguridad los administradores de servidor deshabilitan la posibilidad de explorar directorios via navegador. Esta opción permite navegar por la arborescencia de los directorios y archivos que no posean una página de índice, y ver los contenidos de cada directorio desde el navegador. Por ejemplo, si haces una petición http a un directorio como http://sitio.com/images/, se listarán los archivos jpg, gif y png que estén dentro de ese directorio sin la necesidad de que haya un archivo con links hacia las imágenes para poder observarlas desde el navegador.
Esta opción se activa con el siguiente comando:
Options +Indexes
Tal vez te has preguntado en alguna ocasión: ¿por qué dentro de los directorios de Joomla existen archivos index.html vacíos?. Precisamente para evitar la exploración por directorios cuando esta opción está desactivada!!
Si accedes por ejemplo a http://www.sitio-joomla.com/templates/ solo verás una página en blanco (el index.html) si la exploración de directorios está activada, y un error 403 Forbbiden, si la exploración de directorios está deshabilitada.

Bloqueando a diferentes usuarios para acceder al sitio

Si deseas denegar el acceso alguien en particular necesitas saber la dirección de IP o el dominio desde el cual se conecta a Internet. Los comandos son los siguientes (para denegar el acceso al IP 200.125.234.111, al rango de 209.13.51.000 al 209.13.51.999, y a los usuarios de Speedy):

order deny,allow
deny from 200.125.234.111
deny from 209.13.51.
deny from .speedy.com.ar
allow from all
Cuando estos denegados intenten acceder al sitio recibirán un error HTTP 403 (Acceso prohibido).

Redireccionar visitantes a una nueva página o directorio

Si tenés una página vieja llamada vieja.html y esta va a ser reemplazada por una nueva llamada nueva.html, la sintaxis es:
Redirect permanent /vieja.html http://www.misitiojoomla.com/nueva.html
Si has renombrado un directorio, podés usar una linea de redirección para contemplar todas las páginas dentro de ese directorio.
Redirect permanent /directorioviejo http://www.misitiojoomla.com/directorionuevo/
Ten en cuenta que la vieja página o directorio está especificada utilizando la ruta relativa al directorio raiz del sistema, mientras que la nueva página o directorio se especifican con la URL absoluta.

Prevenir el Hot Linking y el robo de nuestro ancho de banda

Para evitar que otros sitios linken directamente a imágenes del nuestro, y de esa manera gasten parte de nuestro tráfico mensual permitido, tenemos que hacer:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?misitiojoomla.com/.*$ [NC]
RewriteRule .(gif|jpg)$ - [F]
Alternativamente, se puede mostrar una imágen en las páginas hot-linkeadas, por ejemplo, una imágen que diga: "Esta imágen ha sido sustraida sin permiso de www.misitiojoomla.com", para esto, el .htaccess deberá tener el siguiente código:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?misitiojoomla.com/.*$ [NC]
RewriteRule .(gif|jpg)$ http://www.misitiojoomla.com/no-robes.gif [R,L]

donde no-robes.gif es la imágen que va a aparecer en los sitios que tengan páginas hot-linkeadas al nuestro.

Protegiendo el directorio /administrator/ mediante autenticación HTTP

Una medida de seguridad adicional es proteger el directorio /administrator/ utilizando el .htaccess
Agrega para esto las siguientes lineas en el .htaccess que luego ubicarás en tu directorio /administrator/
AuthType Basic
AuthName "Area restringida a administradores"
AuthUserFile /.htpasswds/usuarios.pwd
require valid-user
Adicionalmente debes crear un archivo simple de texto que contenga los usuarios y passwords con autorización para acceder al directorio /administrator/

Para este ejemplo lo llamaremos "usuarios.pwd". Este archivo debe colocarse en otro directorio fuera de public_html, en el ejemplo: .htpasswds
Podés generar estos archivos utilizando htpasswd de Apache o esta herramienta online:
http://www.eftel.com/cgi-bin/user_add.cgi que generará un password encriptado para cada usuario.
Una línea del archivo usuarios.pwd puede ser:

0 comentarios:

Publicar un comentario