10 tips para mejorar la seguridad en WordPress
La seguridad de WordPress es un tema muy delicado. Si os soy sincero, es uno de los temas más controvertidos en el mundo del desarrollo web. Por algo gran parte de la comunidad de desarrollo odia WordPress. Personalmente lo odio y lo amo en la misma proporción ya que me ha traído muchas satisfacciones en mi carrera profesional, pero por otra parte, las malas prácticas a la hora de desarrollar o montar una web con WordPress también me han dado muchos dolores de cabeza.
Para mí supuso un antes y un después a la hora de confeccionar mi primera página web allá por 2008, cuando había aprendido por mi cuenta un poco de HTML y CSS y para publicar un post me tocaba editar manualmente varios archivos y crear otros muchos. En aquel entonces WordPress se utilizaba exclusivamente para la creación de blogs y todo era mucho más sencillo que ahora. Mucho ha llovido desde entonces, y mucho ha cambiado WordPress desde aquellos días pero creo que la esencia de este CMS todavía permanece.
Ser el software más utilizado del mundo para crear sitios web (actualmente, un 42,8% de los sitios web de internet utilizan WordPress) y ser el CMS más utilizado (un 65,1%) hace que la proliferación de exploits para este sistema sea abundante.
¿Qué podemos hacer nosotros para asegurar nuestras instalaciones de WordPress? Aquí van 10 consejos o recomendaciones que podemos aplicar en nuestros sitios web:
1. Protege de spam los comentarios con un plugin anti-spam
El spam no es un problema de seguridad per se, pero tener un listado infinito de comentarios con enlaces a páginas web de dudosa procedencia tampoco es lo más idóneo. Google nos penaliza por este tipo de enlaces y una cantidad excesiva de comentarios puede acarrear otro tipo de problemas en nuestro hosting al engrosar el tamaño de la base de datos. Habitualmente los sitios web WordPress tienen la moderación de comentarios activa por defecto, así que de este modo Google no los rastrea por que no están publicados, pero igualmente estos no se eliminan automáticamente pasado un tiempo y acaban por permanecer indefinidamente en nuestro backend.
Hay muchos plugins que pueden ayudarnos con esta tarea pero yo sin duda no puedo dejar de recomendar Akismet Spam Protection, que es un plugin que viene preinstalado con WordPress y que siempre me ha dado muy buenos resultados.
Hay que tener en cuenta que este plugin preinstalado, aunque busca ser una fuente de ingresos para Automattic, es gratuito para uso personal, por lo que recomiendo encarecidamente que lo utilicéis en vuestras instalaciones de WordPress ya que minimiza considerablemente la entrada de spam en comentarios.
2. Utilizar contraseñas seguras
Este es un consejo que vale tanto para WordPress como para cualquier otro servicio que requiera de acceso con contraseña, pero nunca está de más recordar, que las contraseñas que utilicemos en internet deben ser lo más seguras posible.
El ataque más común utilizado contra WordPress es el ataque con fuerza bruta al login para conseguir el acceso al backend.
Igualmente no solo tienen que ser seguras las contraseñas utilizadas por nuestros usuarios, también tiene que serlo las que se utilizan para el FTP, base de datos, e-mail, etc. Entiendo la tentación de utilizar una misma contraseña para todo, pero, hacedme caso, es lo peor que podéis hacer. Si utilizáis una contraseña débil o utilizada en muchas otras plataformas o sitios web, al primer intento que alguien realice con un script que coteje listados filtrados de contraseñas, cualquiera podrá acceder a vuestro sitio web y depositar allí todo el código malicioso que desee.
3. Mantener WordPress y sus plugins actualizados
Todos los días aparecen nuevas vulnerabilidades en materia de software y WordPress no es ajeno a esto. Es cierto que la comunidad de WordPress se toma muy en serio la seguridad del CMS y que el sistema base tiene pocos agujeros de seguridad (o al menos aparecen muy pocos a lo largo del año), pero el problema de tener una comunidad basada en el open source y permitir el desarrollo de todo tipo de plugins que extienden las funcionalidades base, hace que las posibilidades de que haya más agujeros de seguridad aumenten.
Mantener actualizados tanto el core de WordPress como sus plugins es indispensable para no vernos afectados por los distintos exploits que aparecen continuamente.
Así mismo, hay que tener actualizadas las versiones de PHP y MySQL que estemos utilizando en nuestro alojamiento, ya que si queremos tener WordPress y sus plugins actualizados, en muchas ocasiones será también necesario tener estos módulos al día para que el código sea compatible.
4. Realiza backups periódicos
Todos sabemos que, en teoría, debemos realizar los tips anteriores con la mayor frecuencia posible pero también sabemos que hay veces que no lo hacemos con la frecuencia que sería necesaria. Igualmente, podría pasar que se descubriese un exploit en un plugin y mientras surge una solución por parte del creador, tengamos la mala suerte de ser uno de los sitios atacados.
Limpiar un WordPress hackeado es una tarea muy tediosa y costosa por lo que dependiendo del tipo de ataque realizado (si se trata de inyección de código malicioso o inyección de enlaces de spam) convendría optar por recuperar una versión anterior de la web mediante un backup que tengamos a mano.
La importancia de que estos backups sean realizados en cortos intervalos de tiempo no tiene otra razón de ser que la de no perder demasiada información en el caso de que tuviésemos que recuperar una versión anterior a la actual.
5. Utilizar un prefijo alternativo en base de datos
Tengo que reconocer que este consejo no aumenta considerablemente la seguridad pero puede suponer una barrera en algunos casos. Por defecto, las tablas de la base de datos de WordPress utilizan el prefijo “wp_”. Durante un tiempo se creyó que si dejábamos el prefijo base, nos arriesgábamos a que fuese más fácil acceder a la información de nuestro sitio mientras que si lo cambiábamos, poníamos las cosas más difíciles al atacante. El tema es que, si ponemos el supuesto de que el atacante ha conseguido el acceso a nuestra base de datos no hay nada que le detenga a la hora de averiguar cuál es el prefijo actual, por lo que sugerir que cambiar el prefijo aumenta la seguridad considerablemente es erróneo.
Igualmente creo que es una buena práctica cambiarlo siempre que sea posible, ya que si tenemos la suerte de que el atacante no sea avanzado técnicamente, tal vez este sea el consejo que marque la diferencia.
6. Asigna los permisos correctos a carpetas y archivos de WordPress
En un sistema de archivos de computadores, los directorios y ficheros que lo integran tienen diversos permisos para determinar quién o qué puede leer, escribir o modificar dichos archivos.
En los servidores que alojen WordPress es muy importante tener configurados los permisos correctos para que el CMS sea capaz de realizar subidas de imágenes o ficheros, actualizar el core o los plugins on-the-fly. Por lo general, los permisos mínimos que se deberían aplicar en WordPress deberían ser 755 para carpetas y 644 para ficheros, aunque podría haber numerosas excepciones y diversos escenarios en los que tendrían que ser más restrictivos debido a otras razones que no cubriremos en este artículo.
En este punto, hago un alto en el camino para que salga el desarrollador que llevo dentro. Debo recalcar que, normalmente, no es muy buena idea que se puedan actualizar el core y los plugins en un servidor de producción, de hecho lo encuentro totalmente desaconsejable si tenemos en cuenta unas buenas prácticas de mantenimiento de software.
Actualizar a la ligera estos componentes no debería hacerse sin haber testeado dichos componentes en un entorno controlado ya que no podemos prever las cosas que podrían fallar debido a incompatibilidades entre plugins o incluso entre diversas versiones de WordPress y algunos plugins.
Tengo claro que el hecho de que sea posible actualizar los componentes de WordPress de una manera tan cómoda y fácil es lo que hace que tenga una tasa tan alta de adopción en internet ya que la versatilidad de ampliar las funcionalidades de WordPress mediante plugins le convierte en uno de los mayores competidores en el panorama de los CMS.
Siendo consciente de esto, y si no se tiene la posibilidad de contar con un desarrollador que lleve a cabo este mantenimiento y testeo del sitio web, os aconsejo que apliquéis el siguiente tip del que voy a hablar a continuación.
7. Utilizar los mínimos plugins necesarios
Sí, a la gente le encantan los plugins y lo comprendo perfectamente, pero la mayoría de problemas a la hora de mantener un WordPress vienen a raíz de depender de demasiados plugins. Si es nuestro caso y nuestra web tiene problemas de rendimiento o un exceso de consumo de los recursos de nuestro alojamiento, tendremos que pararnos a analizar si en nuestro sitio web podríamos implementar ciertas funcionalidades de manera nativa haciendo más eficiente el uso de dichas funcionalidades.
Un desarrollo de WordPress a medida puede solucionar muchos de estos problemas sin perder la flexibilidad que nos otorga WordPress.
8. Eliminar plugins y themes inactivos
Eliminar los plugins y themes inactivos reduce los posibles agujeros de seguridad que pudieran tener dichos componentes. Normalmente si se encuentran inactivos, no los mantendremos actualizados y por tanto supondrá un peligro innecesario conservarlos en nuestro sitio web si no vamos a utilizarlos en ningún momento.
9. Usar un plugin de seguridad
Uno de los consejos definitivos es utilizar un plugin de seguridad para realizar algunos de los tips que se han recomendado en este artículo y muchas más que podemos considerar interesantes de implementar.
Personalmente, recomiendo iThemes Security que me parece una de las opciones más completas para WordPress. Con este plugin se pueden realizar backups periódicos de base de datos, cambiar el prefijo de las tablas de nuestra base de datos, cambiar los permisos de archivos y carpetas, bloquear ataques de fuerza bruta, detectar cambios en nuestro sistema de ficheros, desactivar XML-RPC, evitar acceso a URLs con parámetros extraños, desactivar la navegación por carpetas, etc.
Os recomiendo también suscribiros a su newsletter ya que avisa de las vulnerabilidades que van surgiendo de WordPress y plugins.
10. Cambiar la estructura de carpetas base de WordPress
El consejo definitivo que considero fundamental en materia de seguridad es cambiar la estructura de carpetas base de WordPress. Por lo general, WordPress tiene la siguiente estructura:
/wp-admin
/wp-content
/wp-includes
index.php
license.txt
readme.html
send.php
wp-activate.php
wp-blog-header.php
wp-comments-post.php
wp-config.php
wp-config-sample.php
wp-cron.php
wp-links-opml.php
wp-load.php
wp-login.php
wp-mail.php
wp-settings.php
wp-signup.php
wp-trackback.php
xmlrpc.php
Al ser una estructura de carpetas y ficheros que cualquiera puede reconocer, es muy fácil para los atacantes intentar acceder a ciertos archivos para explotar las posibles vulnerabilidades que existan, ya que conocen la ruta de antemano. De este modo, si cambiamos la estructura utilizada, ofuscamos ciertas rutas para que no sean accesibles y de ese modo, truncar un posible ataque. Una posible estructura de carpetas podría ser la que comenta Mark Jaquith en esta genial charla de la WordCamp de 2011 que aunque es antigua, no está para nada desfasada. Os aconsejo que con la base de la que Mark habla, creéis vuestra propia base de ficheros y desarrolléis vuestros proyectos totalmente autónomos.
Conclusión
Posiblemente haya muchas más recomendaciones que tener en cuenta a la hora de securizar nuestro sitio basado en WordPress, pero considero que estos 10 tips son una buena base con la que empezar a desarrollar de manera más eficiente y, claro está, más segura. Todos estos consejos incrementan considerablemente la seguridad de WordPress y no son costosos de implementar si los aplicamos cuando empezamos a desarrollar un proyecto. Hacedme caso, no cometáis el error de considerar una tarea secundaria la seguridad en WordPress. Os ahorraréis muchos dolores de cabeza en el futuro.