Uno de cada 10 sitios web del mundo usa WordPress. Lo que se dice, una banquete bastante apetecible para quienes se dedican a inundar de virus y programas malignos la red. Tiempo atrás publicaba en el blog una serie de consejos básicos de seguridad en WordPress para quien tuviera un sitio que corriera sobre este CMS.
En esta ocasión, he tratado de sistematizar y organizar algunas prácticas para incrementar la seguridad de una instalación en WordPress que van un poco más allá del «elegir una contraseña segura». Antes de hacer cualquier desastre conviene probar estos consejos con una instalación de prueba de WordPress para asegurarse que todo sale bien. Si bien no hay que ser un especialista en seguridad, vamos a tocar algunos archivos y configuraciones que podrían dejar nuestra web fuera de servicio si hacemos algo mal. Algo importante: siempre hacer las pruebas calcando la configuración de nuestro hosting y, de ser posible, en otro sitio de pruebas configurado en el mismo servidor.
Para quienes buscan blindar su sitio en WordPress, aquí van algunos consejos y trucos para incrementar la seguridad
1. Quitar el usuario admin
Hasta hace poco tiempo las instalaciones de WordPress creaban por defecto el usuario ‘admin’ para el administrador. Con eso, el atacante tenía resuelto el 50% de su problema: solo le queda conocer la clave. Si tu instalación de WordPress tiene tiempo es probable que tengas este usuario que, además, no se puede modificar desde la configuración de WordPress. Hay que hacerlo directamente desde la base de datos.
Con un gestor tipo phpMyAdmin es bastante sencillo. Se hace con el siguiente código (reemplazar ‘nuevousuario’ con el nombre deseado):
update tableprefix_users set user_login='nuevousuario' where user_login='admin';
2. Cambiar el prefijo de la base de datos
La configuración inicial de WordPress agrega el prefijo «wp_» a las tablas de la base de datos. El problema es que si algún día se descubre una vulnerabilidad sería bastante fácil para el atacante adivinar cuáles son las tables presentes en la base de datos si no modificamos este valor. Hacerlo es bastante sencillo: solo hay que abrir el archivo de configuración wp-config.php y modificar el valor presente por uno nuevo:
$table_prefix = 'nuevoprefijo_';
3. Menos detalles de error al fallar el login
La página de login en WordPress brinda demasiada información si uno no ingresa bien la clave. Por ejemplo, asvisa si el error se debe a que el usuario no existe o la clave no corresponde. Para evitar que WordPress revele estos datos basta con agregar un par de líneas al archivo function.php del theme que tenemos activo:
function explain_less_login_issues(){ return 'ERROR: Los datos ingresados son incorrectos.';}
add_filter( 'login_errors', 'explain_less_login_issues' );
4. No dejar directorios navegables
Un ABC de las medidas de seguridad es no dejar un directorio navegable porque el atacante puede conocer la estructura del sitio y ver los archivos. Esto suele se maneja directamente en la configuración del servidor pero hay algo que podemos hacer desde WordPress: poner un archivo index.php vacío en cada directorio vacío.
Por defecto WordPress lo hace pero se le ha olvidado uno: donde se suben los archivos. La solución es simple: crear con cualquier editor de texto un archivo vacío, nombrarlo como index.php y subirlo a wp-content/uploads
5. Mover wp-config
El archivo más sensible de toda instalación de WordPress es wp-config.php. Tiene la información para conectarse a la base de datos y cualquiera que acceda a esta información está en condiciones de tomar el control de la web. Lo mejor es moverlo a una ubicación más segura como puede ser un nivel superior a la raíz del sitio (por encima de la carpeta public_html o www).
Para no tocar el corazón de WordPress -y con ello tener que temer por cada actualización- lo más práctico es hacer un include desde el archivo en cuestión. Es decir, en el wp-config agregar una línea con algo así (cambiar por la ruta propia de cada servidor):
include ('/home/user/config.php');
Y en config.php ponemos todos los datos de conexión como usuario, contraseña y demás.
6. Deshabilitar editor de archivos
WordPress incluye un editor de archivos muy práctico para modificar los archivos del tema. Pero no se trata de una práctica segura por lo cual lo mejor para cambiar algo es ingresar vía FTP, descargar el archivo en cuestión, editarlo y volverlo a subir. Se puede deshabilitar el editor de archivos para evitar manos extrañas de una forma muy sencilla. Hay que añadir esta línea a wp-config.php
define('DISALLOW_FILE_EDIT', true);
7. Quitar versión de WordPress
Punto controvertido. Veamos: Todas las instalaciones de WordPress muestran su número de versión con fines «estadísticos». El problema es que si el sitio queda desactualizado ese número es casi una invitación a atacar el sitio. Sin embargo, los críticos dicen que de nada vale esconder el número de versión si la instalación de WordPress sigue teniendo agujeros por todas partes.
En fin, esconder la versión no sirve de nada si no se toman medidas de seguridad adicionales. Pero si nos interesa desviar la atención de curiosos hay que abrir el archivo functions.php del tema o escribir esto:
function no_generator() { return ''; }
add_filter( 'the_generator', 'no_generator' );
8.Remover archivos innecesarios
Luego instalar WordPress quedan un par de archivos con información sensible: readme.html y wp-admin/install.php. El primero muestra la versión de WordPress que estamos corriendo mientras que el segundo permite instalar el sistema. Mejor borrarlos.
9. Bloquear pedidos de url maliciosas
Un clásico de estas épocas en ataques a web es realizar peticiones desde páginas web maliciosas. El plugin Block Bad Queries se encarga de bloquear cualquier pedido extraño.
10. Permisos de archivos
En los equipos de escritorio no solemos prestar atención a los permismos de archivo pero un servidor es un aspecto de seguridad clave. Esto permite establecer quién puede leer, modificar o eliminar un archivo. La regla general es otorgar el mínimo de permisos posible para evitar que un usuario indeseado puede manipular datos sensible. Algunos consejos del WordPress Codex:
- wp-config.php con permisos 400 o 440.
- .htaccess con permisos 644 o 664.