Problemas con mod_security

Introducción.

Mod_security es una herramienta extremadamente útil que actúa como un firewall para los sitios web permitiendo filtrar de manera muy flexible la forma como los usuarios acceden a las aplicaciones web, evitando por ejemplo vulnerabilidades conocidas o accesos inválidos.  Mas información.

Su flexibilidad la convierte también en algo un tanto compleja de entender, como todo en la vida tendré que sacar un tiempo para estudiarla y entender en serio como se implementan sus reglas.

Descripción del problema.

En la vida práctica algunas veces las restricciones por defecto que por seguridad el módulo impone interfieren con el correcto funcionamiento de la aplicación web y es cuando suceden mis problemas.  Me sucedió alguna vez con un sitio basado en CodeIgniter y ahora con una instalación de Piwik.

El acceso al script de generación de estadísticas funcionaba correctamente cuando este era accedido directamente.

http://www.server.com/piwik/piwik.php

Sin embargo fallaba por extrañas razones cuando era accedido con parámetros GET tal y como se debe hacer cuando se instala en un sitio web para que lleve las estadísticas de acceso a sus páginas.

http://www.server.com/piwik/piwik.php?url=http%3A%2F%2Fwww.server.com%2Fsite%2F&action_name=Main&idsite=1&res=1280×1024&h=10&m=55&s=25&fla=1&dir=0&realp=0&pdf=1&wma=1&java=0&cookie=1&title=Main%20|%20My%20Site&urlref=

Si se invocaba directamente se producía un error 503 (Service Temporarily Unavailable) y en las aplicaciones que lo tuvieran instalado para el control de sus estadísticas aparecía como una imagen al final de su contenido (en lugar de un cuadrado transparente).

El problema era que mod_security estaba impidiendo el acceso normal al sitio debido a alguna de sus reglas.

Descripción de la solución.

Sin tener profundos conocimientos en la creación y manipulación de las reglas de mod_security la idea no era modificarlas sino evitar que se aplicara el filtro sobre la aplicación web afectada.

Una primera solución fue desactivar por completo a mod_security para esa aplicación específica.  Para hacer esto es necesario crear un archivo .htaccess en el directorio raíz de la aplicación con el siguiente contenido.

SecFilterEngine Off
SecFilterScanPOST Off

Esto soluciona el problema sin embargo también elimina las ventajas de seguridad que trae consigo el módulo.  Una segunda opción sería entonces evitar que el filtro se aplique al archivo específico que está teniendo el problema con el filtro.  Para hacer esto el contenido del archivo .htaccess debe ser el siguiente.

SetEnvIfNoCase Request_URI ^/piwik/piwik.php$ MODSEC_ENABLE=Off

Donde se especifica la ubicación exacta (relativa o absoluta) del archivo con problemas.

Enlaces.

Leave a Reply

Your email address will not be published. Required fields are marked *