Desterramos el mito de la inseguridad de Joomla!, a la par que ofrecemos diversas técnicas y extensiones que ayudan a incrementar la seguridad en el célebre CMS. Este artículo está dedicado a la seguridad en el CMS Joomla!, ofreciendo algunos datos interesantes y sobre todo explicando cuáles son las tareas que puedes realizar para incrementar la seguridad del sistema. Este texto surge como apéndice al programa #joomlaIO, emitido en DesarrolloWeb.com, en el que por algo más de una hora se estuvo debatiendo el tema de la seguridad y aportando diversas técnicas y herramientas que incrementarán la fiabilidad y seguridad de los sitios web basados en este CMS. La autoría de este artículo es comunitaria, pertenece a todo el equipo de #joomlaIO, representado por Javier Mendoza @cyxmedia, Manolo Aguado @bolemc e Isidro Baquero @isidrobaq, que estuvieron acompañados por Guillermo Bravo @jwillin y Miguel Ángel Álvarez @midesweb. Mucho se ha hablado de que Joomla! inseguro, y lo cierto es que muy pocas veces se han aportado datos que puedan confirmar esas hipótesis. La desinformación muchas veces ha provocado que asumamos como ciertas algunas opiniones de profesionales que no se han molestado en buscar la raíz de los problemas. Si te lo quieres demostrar a ti mismo, en este artículo se especificarán al final diversas acciones que podrás implementar para que Joomla! pueda ser utilizado con toda seguridad.
Por qué no se debe decir que Joomla es inseguro
Partamos del hecho que la inseguridad es una constante de todo sistema informático. Nunca podemos decir que un software es completamente seguro, igual que nadie puede asegurar que esté completamente libre de errores. La inseguridad existe, en Joomla!, igual que en cualquier otro CMS o pieza de software en general. Existen en Internet multitud de sitios basados en Joomla! que son inseguros ¿Pero realmente se puede generalizar y decir que por ello Joomla! es inseguro? La seguridad o la inseguridad es realmente una responsabilidad de los desarrolladores, que muchas veces no hacemos correctamente nuestro trabajo. Pero no me refiero a la comunidad que realiza el propio CMS, sino más bien a quienes lo utilizamos para construir sitios basados en él. Los desarrolladores muchas veces dejamos huella de nuestro trabajo y con ello a veces quedan piezas de software que pueden comprometer un sistema. El ejemplo más típico, que ocurre en Joomla igual que en otros CMS, es el uso de determinadas extensiones que tienen un problema de seguridad o el uso de versiones antiguas de Joomla que no están actualizadas y que contienen agujeros de seguridad. Pero hay casos todavía más básicos. Un sistema puede ser tremendamente seguro y sin embargo, escoger una clave corta o predecible lo puede dejar vulnerable. Aunque ojo, no solo debemos escoger claves complejas, sino realizar otras optimizaciones como cambiar los nombres a las tablas, tener cuidado con los permisos de los archivos o directorios, ofuscar las versiones del CMS o los nombres de los archivos que contienen código. Todas esas recomendaciones las revisaremos enseguida. A veces se critica a Joomla diciendo que al ser software libre cualquiera puede saber los errores de seguridad que tiene, pero eso podría ser un crítica contra todas las herramientas de código abierto y sabemos que no es cierto. Existe una numerosa comunidad detrás que apenas aparece un agujero de seguridad publica nuevas versiones del software para solucionarlo. Nuevamente somos los desarrolladores los que debemos, concienzudamente, actualizar el CMS siempre que aparecen nuevas versiones estables seguras. Durante el evento de seguridad en Joomla! #joomlaIO también se mencionó una estadística interesante. Solo el 5% de los errores de seguridad de Joomla! se dieron en el "core", o sea, en la arquitectura básica del CMS. Esto quiere decir que el 95% de los agujeros de seguridad detectados en Joomla! pertenecen a otras piezas de software externas, con complementos como extensiones o plugins, temas, etc. En este sentido se puso énfasis en señalar que habitualmente los desarrolladores instalamostemas "piratas" que realmente tienen caballos de troya con scripts que roban contraseñas u otros datos sensibles. Por ello hay que tener siempre en cuenta descargar complementos o plantillas de fuentes seguras y desconfiar cuando un sitio web ofrece gratuitamente temas gratuitos que son de pago en otros sitios.Checklist de seguridad básica en Joomla!
A continuación encontraremos una serie de items fundamentales que tenemos que observar a la hora de implementar Joomla en un ambiente seguro. Es apenas un listado, que a buen seguro servirá de mucha utilidad, sin embargo, si se desea obtener mayores explicaciones, recordamos que está disponible el hangoutdonde el equipo de#joomlaIO ofreció muchos otros detalles, consejos y guías para implementación de estos items de seguridad. Primeros pasos / Seguridad en el core de Joomla!:- Descargar desde joomla.org o sitios de absoluta confianza
- Comprobar que estamos instalando la última versión estable de Joomla!
- Comprobar que no estamos utilizando el nombre de superusuario por defecto (admin)
- No establecer la contraseña de FTP (establecerla constituiría una vulneración de la seguridad)
- Activar el fichero .htaccess en servidores Linux (para ello debemos renombrar el fichero htacess.txt a .htaccess). Podemos ampliar la seguridad con docs.joomla.org Htaccess_examples_(security)
- Habilitar las URLs amigables para los motores de búsqueda (SEF)
- Comprobar que la duración de la sesión no excede de 15 minutos
- Eliminar plantillas que no sean necesarias
- Comprobar que los permisos de directorios están en 755 y los permisos de archivos en 644
- Utilizar un usuario de base de datos para la configuración de Joomla que no tenga acceso externo a la misma
- Realizar un backup de la estructura FTP y la base de datos antes de instalar cualquier extensión. Utilizar Akeeba Backup / Admin Tools
- Descargar extensiones solo de sitios de confianza extensions.joomla.org
- Comprobar que las extensiones que instalamos son la última versión estable disponible
- Eliminar las extensiones que no vayan a ser utilizadas y no formen parte del CORE (conviene revisar manualmente que los directorios y archivos asociados a la extensión se han borrado correctamente)
- Comprobar que register_globals está desactivada
- Comprobar que allow_url_fopen está desactivada
- Comprobar que allow_url_include está desactivada
- Comprobar que open_basedir está activada y las rutas asociadas (esta directiva limita los archivos que se pueden abrir por PHP al árbol de directorios especificado)
- Comprobar que están desactivadas show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open
- Comprobar que safe_mode está desactivado
- Comprobar que las carpetas del sitio están en 755
- Comprobar que los archivos del sitio están en 644
- Comprobar que no existen ficheros en la carpeta temporal /tmp