Vamos a admitirlo, siendo wordpress una de las plataformas para blogging mas populares del mercado hoy en dia y cientos de miles de personas desarrollando nuevas e ingeniosas funcionalidades todos los días, es fácil que  nos encontremos con vulnerabilidades introducidas por el core mismo de wordpress, o introducidas por plugins y/o templates hechos por terceras personas.

Existe una lista creciente de estas vulnerabilidades de wordpress, que son documentadas y descritas todos los días por varios proyectos como wpvulndb.com

La amenaza es real, y si tu aplicación de wordpress maneja información sensible de clientes o simplemente representa un ingreso para tu dia a dia es importante que se tomen ciertas medidas de seguridad como las que describimos a continuación.

Mantener WordPress Al Dia

La comunidad de wordpress está constantemente mejorando el core, las funciones y parcheando vulnerabilidades conocidas. Por lo tanto el esfuerzo de mantenerlo a dia vale totalmente la pena.

El manejo de plugins para mantener tu wordpress al dia podria ser una tarea complicada, ya que con cada versión nueva de wordpress que sale mas de algun template o plugin quedan inoperantes pero es sumamente necesario que la deuda técnica no crezca y estos problemas sean atendidos a la prontitud.

Restringir el acceso al panel de administración

Si se cuenta con acceso a la configuración del servidor restringir el acceso al panel de administración por medio de filtrado de ip es algo relativamente sencillo, las dos opciones mas comunes son que tu wordpress corra sobre apache, o que corra sobre nginx.

Si wordpress corre sobre apache se debe abrir el archivo .htaccess que vive en el directorio raíz de la instalación de wordpress (d0nde vive wp-config.php) y agregar las siguientes líneas al mismo.

<Files wp-login.php>
    Order Deny, Allow
    Deny From All
    Allow from xxx.xxx.xxx.xxx
</Files>

Los cambios toman efecto de inmediato, no hay necesidad de reiniciar apache

Si wordpress corre sobre nginx debemos modificar nuestro nginx.conf y agregar la siguiente cláusula a la sección donde se manejan los locations:

location ~ ^/(wp-admin|wp-login\.php) {
            allow xxx.xxx.xxx.xxx/32;
            deny all;
}

Acto seguido debemos reiniciar nginx

nginx -s reload

Yo personalmente recomiendo altamente usar nginx en lugar de apache, porque? porque nginx es significativamente mas rápido.

Cambiar el prefijo de las tablas

Durante la instalación de wordpress el script crea las tablas que el sistema utiliza y les asigna un prefijo que por default es “wp_”  siendo esto del dominio público es fácil para un atacante conocer el nombre de las tablas críticas del sistema digamos wp_users, wp_usermeta, wp_postmeta y así aprovecharse de aquellos desarrolladores de templates y plugins que no leyeron mi artículo de inyección SQL y crear un ataque malicioso.

Esta medida debe hacerse al momento de instalar wordpress, de modo que gente malintencionada no pueda adivinar los nombres de nuestras tablas.

Digamos que estamos viendo nuestro wp-config, y nuestro sitio se llama ‘holamundo.com’ debemos cambiar la configuracion asi:

$table_prefix  = 'wp_holamundo_com_01';

de esta forma la instalación deja de ser ‘standard’ y es mas difícil un ataque de inyección SQL.

Ocultar la version de wordpress

Siendo que existen listas públicas de vulnerabilidades de wordpress y que los atacantes estan a la orden del dia, es poco conveniente que wordpress le diga a nuestros visitantes que versión está usando.

Sip! wordpress le añade la versión del core a los encabezados del documento y a los RSS feeds. Muchos sitios ofrecen soluciones a medias como remover algunas líneas del header.php o quitar la acción wp_generator por completo. No obstante la verdadera solución para que no quede huella de la versión es agregar el siguiente hook a tu functions.php

function ocultar_version() {
    return '';
}
add_filter('the_generator', 'ocultar_version');

a mi me gusta poner un mensaje gracioso en la versión como “no, no, no wrong way” en el return 🙂

En general hay una infinidad de medidas de seguridad que podríamos tomar para proteger nuestro sitio pero casi todas involucran administración de servidores, pero ese tema se sale un poco del contexto de wordpress y quizas mas adelante le dedique un post al tema.

Happy coding!

Categorized in: