Bienvenido, Invitado
Nombre de Usuario: Contraseña:

TEMA: Seguridad utilizando .htaccess

Seguridad utilizando .htaccess 5 años 6 meses antes #4720

  • josecardenasvejar
  • Avatar de josecardenasvejar
  • Fuera de línea
  • Moderator
  • Mensajes: 111
  • Gracias recibidas 2
  • Karma: 5
Queridos Colegas, buscando mejoras para mis sitios Joomla! y para complementar el tema anterior del colega DarkJonter, encontré un mini-manual sobre seguridad de nuestro sitio en servidores Apache utilizando .htaccess. Espero les sirva


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

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

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, puedes 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 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 www.sitio-joomla.cl/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 aaa.aaa.aaa.a, al rango de bbb.bbb.bbb.b al ccc.ccc.ccc.c.):

order deny,allow
deny from aaa.aaa.aaa.a
deny from bbb.bbb.bbb.b.
deny from ccc.ccc.ccc.c
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 tienes 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 www.misitiojoomla.com/nueva.html

Si has renombrado un directorio, puedes usar una linea de redirección para contemplar todas las páginas dentro de ese directorio.

Redirect permanent /directorioviejo 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)$ 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
Puedes generar estos archivos utilizando htpasswd de Apache o esta herramienta online:
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:

usuario:AF2PLEE4xyp0Q
José Cardenas Vejar
Moderador
Comunidad Joomla! Chile
Última Edición: 5 años 6 meses antes por josecardenasvejar.
El administrador ha desactivado la escritura pública.

Re: Seguridad utilizando .htaccess 5 años 6 meses antes #4732

  • willin
  • Avatar de willin
  • Fuera de línea
  • Administrator
  • Cuidado! Ya no estoy solo...
  • Mensajes: 1897
  • Gracias recibidas 44
  • Karma: 67
Hola Jose!

Colega... Se las mandó... Excelente información.

Te comento que una de las preguntas frecuentes en el foro dice relación con el modo Rewrite y las URL's amigables, quitar el "index.php" de la URL para algunos usuarios ha sido un verdadero dolor de cabeza y en muchos casos, han terminando rindiéndose y dejándolo en la URL.

Un cordial saludo Colega.
Guillermo Bravo
Administrador
Foro Joomla Chile
El administrador ha desactivado la escritura pública.




Re: Seguridad utilizando .htaccess 5 años 6 meses antes #4734

  • josecardenasvejar
  • Avatar de josecardenasvejar
  • Fuera de línea
  • Moderator
  • Mensajes: 111
  • Gracias recibidas 2
  • Karma: 5
Hola Willin! Es un tema más complejo el de las url amigables, ya que muchas veces hay que 'entrar a picar' en los archivos de configuración, y ya pasa por alguien que tenga cierto conocimiento en programación.

Espero que el tutorial le sirva a nuestros colegas.

Saludos Willin!!

José
José Cardenas Vejar
Moderador
Comunidad Joomla! Chile
El administrador ha desactivado la escritura pública.




Moderadores: FeDoo, willin
Tiempo de carga de la página: 0.187 segundos
Gracias a Foro Kunena