WordPress impulsa más del 40 % de la web, lo que lo convierte en un objetivo prioritario para los ataques automatizados. La buena noticia: la mayoría de los hackeos de WordPress que tienen éxito explotan vulnerabilidades bien conocidas y fácilmente evitables. Esta lista te guía por todas las capas de la seguridad de WordPress, desde el cifrado de transporte hasta el endurecimiento a nivel de servidor. Trabájala de forma sistemática y tu sitio será mucho más difícil de comprometer que la gran mayoría de instalaciones de WordPress que existen.
Asegurar tu sitio WordPress con SSL y HTTPS
HTTPS cifra todos los datos que viajan entre los navegadores de tus visitantes y tu servidor. Sin él, las credenciales de inicio de sesión, los envíos de formularios y las cookies de sesión se transmiten en texto plano, lo que hace que sea trivial interceptarlos en redes públicas.
- Instala un certificado SSL válido: la mayoría de los proveedores de hosting ofrecen certificados gratuitos de Let's Encrypt que se renuevan automáticamente cada 90 días. Si tu hosting no admite Let's Encrypt, el plan gratuito de Cloudflare incluye un certificado SSL compartido. No hay ninguna razón para funcionar sin HTTPS en 2025.
- Redirige todo el tráfico HTTP a HTTPS: configura una redirección 301 para que cada petición a
http://se reenvíe permanentemente ahttps://. En Apache, añade esto a tu.htaccess:
En Nginx, añade un bloque de servidor que redirija:RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } - Soluciona todas las advertencias de contenido mixto: tras cambiar a HTTPS, comprueba si hay imágenes, scripts u hojas de estilo que aún se cargan por HTTP. La consola del navegador las marcará como advertencias de "Mixed Content". Actualiza las URL
http://codificadas en tu base de datos con una herramienta de búsqueda y reemplazo como Better Search Replace. - Habilita la cabecera HSTS: HTTP Strict Transport Security indica a los navegadores que utilicen siempre HTTPS para tu dominio, incluso si un usuario escribe
http://manualmente. Añade esta cabecera con un max-age de al menos seis meses (15768000 segundos). HabilitaincludeSubDomainssolo si todos tus subdominios también admiten HTTPS.
Configurar las cabeceras HTTP de seguridad para WordPress
Las cabeceras de seguridad son instrucciones que tu servidor envía al navegador. No suponen ningún coste en cuanto a rendimiento, pero ofrecen una protección sustancial frente a vectores de ataque habituales como el clickjacking, la confusión de tipo MIME y el cross-site scripting.
- X-Frame-Options: SAMEORIGIN: impide que tus páginas se incrusten en iframes de otros dominios. Esto bloquea los ataques de clickjacking, en los que un atacante superpone elementos invisibles sobre tu sitio para engañar a los usuarios y que hagan clic en algo que no pretendían.
- X-Content-Type-Options: nosniff: evita que los navegadores intenten adivinar el tipo MIME de un archivo. Sin esta cabecera, un navegador podría ejecutar un archivo de texto como JavaScript si el contenido parece código, lo que abre la puerta a la inyección de scripts.
- Referrer-Policy: strict-origin-when-cross-origin: controla cuánta información de la URL se envía al navegar a sitios externos. Esto evita filtrar parámetros de URL sensibles (como tokens de restablecimiento de contraseña) a servidores de terceros.
- Permissions-Policy: restringe el acceso a funciones del navegador como cámara, micrófono, geolocalización y APIs de pago para el contenido incrustado. Aunque no utilices estas funciones, definir la política impide que scripts inyectados abusen de ellas.
- Content-Security-Policy (CSP): la cabecera de seguridad más potente, pero también la más compleja de configurar. CSP define qué orígenes pueden cargar scripts, estilos, imágenes y otros recursos. Empieza con
Content-Security-Policy-Report-Onlypara monitorizar las infracciones sin romper tu sitio, y luego endurece la política poco a poco. Un punto de partida mínimo:Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;
Puedes establecer estas cabeceras en tu archivo .htaccess (Apache), en tu configuración de Nginx o mediante un plugin de seguridad para WordPress. Si utilizas Cloudflare, también puedes configurar la mayoría de ellas en Security > Settings.
Técnicas de endurecimiento del núcleo de WordPress
WordPress en sí está bien mantenido y se parchea con regularidad, pero su configuración por defecto deja varias puertas abiertas que deberías cerrar de forma deliberada.
- Mantén actualizados el núcleo de WordPress, los plugins y los temas: la mayoría de los hackeos de WordPress explotan vulnerabilidades conocidas en software desactualizado. Habilita las actualizaciones menores automáticas (están activadas por defecto) y comprueba si hay actualizaciones mayores al menos una vez por semana. Considera habilitar las actualizaciones automáticas de plugins para los plugins de confianza.
- Elimina por completo los plugins y temas que no uses: desactivar un plugin no elimina su código de tu servidor. Un atacante todavía puede explotar vulnerabilidades en plugins desactivados. Borra todo lo que no estés utilizando activamente y mantén solo un tema por defecto como respaldo.
- Deshabilita XML-RPC: la interfaz XML-RPC (
/xmlrpc.php) se diseñó para la publicación remota y los pingbacks. Hoy en día se utiliza sobre todo de forma abusiva para ataques de amplificación por fuerza bruta y DDoS. A menos que la necesites para Jetpack o la app móvil de WordPress, deshabilítala por completo. Puedes bloquearla a nivel de servidor:# Apache .htaccess <Files xmlrpc.php> Order Deny,Allow Deny from all </Files> - Restringe el endpoint de usuarios de la REST API: por defecto,
/wp-json/wp/v2/usersexpone los nombres de usuario a cualquiera. Esto facilita enormemente que los atacantes descubran nombres de inicio de sesión válidos. Restringe este endpoint solo a peticiones autenticadas, ya sea con un plugin o con un fragmento de código personalizado. - Bloquea la enumeración de usuarios mediante los archivos de autor: incluso sin la REST API, los atacantes pueden descubrir nombres de usuario solicitando
/?author=1,/?author=2, etc. Bloquéalo redirigiendo las peticiones al archivo de autor o deshabilitándolas por completo si tu sitio no las necesita. - Elimina el número de versión de WordPress: WordPress muestra su versión en una etiqueta meta y en las URL de los archivos CSS/JS del núcleo. Aunque la seguridad por oscuridad por sí sola es insuficiente, eliminar el número de versión obliga a los atacantes a sondear en lugar de simplemente buscar vulnerabilidades conocidas para tu versión exacta.
- Asegura o elimina el archivo debug.log: cuando
WP_DEBUG_LOGestá habilitado, WordPress escribe los errores en/wp-content/debug.log. Este archivo puede contener consultas a la base de datos, rutas de archivos, errores de plugins y otra información útil para los atacantes. Nunca dejes el registro de depuración habilitado en producción y, si el archivo existe, bórralo o bloquea el acceso a él. - Utiliza contraseñas fuertes y únicas y habilita la autenticación de dos factores: cada cuenta de WordPress debería tener una contraseña de al menos 16 caracteres y única para ese sitio. Añade autenticación de dos factores (2FA) con un plugin como WP 2FA o Wordfence Login Security. Esta única medida bloquea prácticamente todos los ataques de fuerza bruta.
- Limita los intentos de inicio de sesión: WordPress permite intentos de inicio de sesión ilimitados por defecto. Utiliza un plugin como Limit Login Attempts Reloaded para bloquear direcciones IP tras unos pocos intentos fallidos, o usa un Web Application Firewall (WAF) que incluya protección contra fuerza bruta.
- Cambia el prefijo por defecto de las tablas de la base de datos: WordPress utiliza
wp_como prefijo de tabla por defecto. Cambiarlo por algo único durante la instalación dificulta ligeramente los ataques automatizados de inyección SQL. Si tu sitio ya está en producción, todavía puedes cambiarlo, pero haz primero una copia de seguridad de tu base de datos.
Permisos de archivos y seguridad del servidor en WordPress
Los permisos de archivos determinan quién puede leer, escribir y ejecutar archivos en tu servidor. Unos permisos incorrectos son una de las configuraciones de seguridad mal hechas más habituales.
- Establece los permisos de archivo correctos: usa 644 para archivos y 755 para directorios. El archivo
wp-config.phpdebería estar en 600 o 640 en la mayoría de los entornos de hosting. Nunca uses 777, que da acceso total de lectura/escritura/ejecución a cualquiera. - Protege wp-config.php del acceso web: este archivo contiene tus credenciales de base de datos, claves de autenticación y salts. En Apache, añade esto a
.htaccess:
Algunas guías de seguridad recomiendan mover<Files wp-config.php> Order Allow,Deny Deny from all </Files>wp-config.phpun directorio por encima de la raíz web. Esto funciona en la mayoría de configuraciones, pero puede provocar problemas con algunos proveedores de hosting. - Deshabilita el editor de archivos integrado: WordPress incluye un editor de archivos en el panel de administración que permite a los administradores modificar directamente los archivos de temas y plugins. Si un atacante consigue acceso de administrador, este editor le da la posibilidad de inyectar código malicioso en cualquier archivo PHP. Deshabilítalo añadiendo esta línea a
wp-config.php:define('DISALLOW_FILE_EDIT', true); - Bloquea el acceso a archivos sensibles: archivos como
readme.html,license.txtywp-config-sample.phprevelan información sobre tu versión y configuración de WordPress. Bloquea el acceso público a ellos a través de la configuración de tu servidor. - Deshabilita la navegación de directorios: si el listado de directorios está habilitado, cualquiera puede navegar por tu carpeta
/wp-content/uploads/y ver todos los archivos que hayas subido. Deshabilítalo añadiendoOptions -Indexesa tu.htaccess.
Estrategia de copias de seguridad y plan de recuperación en WordPress
Ninguna configuración de seguridad está completa sin una estrategia de copias de seguridad fiable. Si ocurre lo peor, una copia de seguridad reciente marca la diferencia entre una pequeña molestia y una pérdida total.
- Automatiza las copias de seguridad diarias: utiliza un plugin como UpdraftPlus, BlogVault o BackWPup para ejecutar copias de seguridad automáticas según un calendario. Como mínimo, haz una copia de seguridad diaria. Los sitios con mucho tráfico o las tiendas WooCommerce deberían plantearse copias de seguridad en tiempo real.
- Almacena las copias de seguridad fuera del servidor: guarda copias en un servicio remoto como Amazon S3, Google Cloud Storage o Dropbox. Si tu servidor se ve comprometido, las copias locales también pueden verse afectadas.
- Prueba tu proceso de restauración: una copia de seguridad que nunca has probado es una copia en la que no puedes confiar. Restaura tu copia de seguridad en un entorno de pruebas al menos una vez por trimestre para confirmar que funciona.
- Conserva varias generaciones de copias de seguridad: mantén al menos 30 días de copias de seguridad diarias. Algunas infecciones pasan desapercibidas durante semanas, así que necesitas poder volver a un estado limpio conocido.
Monitorización continua de la seguridad de WordPress
La seguridad no es un proyecto puntual. Periódicamente se descubren nuevas vulnerabilidades y la configuración de tu sitio puede cambiar con el tiempo a medida que se añaden plugins o se modifican ajustes.
- Instala un plugin de seguridad: Wordfence, Sucuri o NinjaFirewall ofrecen protección en tiempo real, incluidas reglas de cortafuegos, escaneo de malware y seguridad del inicio de sesión. Elige uno (no varios, ya que pueden entrar en conflicto) y configura sus alertas.
- Configura escaneos automáticos de InspectWP: programa escaneos periódicos para monitorizar tu postura de seguridad a lo largo del tiempo. InspectWP te alertará de nuevos problemas como cabeceras faltantes, registros de depuración expuestos o filtraciones del número de versión en cuanto aparezcan.
- Habilita las notificaciones de actualizaciones: asegúrate de que WordPress te envía notificaciones por correo electrónico cuando haya actualizaciones disponibles del núcleo, plugins o temas. Los parches de seguridad a menudo deben aplicarse en cuestión de horas tras su publicación para adelantarse a los exploits automatizados.
- Revisa las cuentas de usuario con regularidad: elimina las cuentas inactivas, especialmente las que tengan rol de administrador o editor. Audita tu lista de usuarios al menos una vez al mes y revoca inmediatamente el acceso a cualquiera que ya no lo necesite.
- Monitoriza tus registros de acceso: revisa los registros de tu servidor en busca de patrones inusuales, como peticiones repetidas a
/wp-login.php,/xmlrpc.phpo rutas que no existen. Muchos plugins de seguridad ofrecen una vista simplificada de los registros.
Verifica la seguridad de tu WordPress con InspectWP
Ejecuta un análisis completo de InspectWP para comprobar todos los elementos relacionados con la seguridad de una sola vez. La sección de seguridad cubre la configuración SSL, las cabeceras HTTP de seguridad, la exposición de la versión de WordPress, la enumeración de usuarios en la REST API, la accesibilidad del registro de depuración y mucho más. Configura escaneos automáticos para recibir notificaciones cada vez que cambie tu postura de seguridad, de modo que puedas abordar nuevos problemas antes de que sean explotados.