Por qué se hackean las webs WordPress (datos reales 2025)
Antes de configurar nada, conviene entender el vector de ataque. Según Wordfence Threat Intelligence 2025:
- 61% de infecciones: plugins desactualizados con vulnerabilidad publicada
- 19%: credenciales de administrador débiles o reutilizadas
- 12%: temas con código malicioso (temas nulled o de fuentes no oficiales)
- 5%: vulnerabilidades del servidor (PHP antiguo, permisos incorrectos)
- 3%: otros (ingeniería social, hosting comprometido)
Lo que esto significa en la práctica: si mantienes los plugins actualizados y usas contraseñas fuertes con 2FA, eliminas el 80% del riesgo. El firewall WAF y el hardening cubren el 15% restante.
Los ataques son principalmente automatizados. No hay un hacker mirando tu web. Hay bots que escanean millones de webs en busca de versiones vulnerables de Contact Form 7, WooCommerce, Elementor o los 20 plugins más usados. Si tu versión aparece en el CVE, te atacan en horas.
Hardening de wp-config.php: las 8 líneas que cambian todo
wp-config.php es el archivo más crítico de WordPress. Estas modificaciones endurecen la configuración base sin instalar ningún plugin:
<?php
// 1. Claves de autenticación únicas (generar en https://api.wordpress.org/secret-key/1.1/salt/)
define('AUTH_KEY', 'Pon aquí tu clave única generada');
define('SECURE_AUTH_KEY', 'Pon aquí tu clave única generada');
define('LOGGED_IN_KEY', 'Pon aquí tu clave única generada');
define('NONCE_KEY', 'Pon aquí tu clave única generada');
// 2. Deshabilitar edición de archivos desde el panel
define('DISALLOW_FILE_EDIT', true);
// 3. Deshabilitar instalación de plugins/temas desde el panel
define('DISALLOW_FILE_MODS', true); // Solo si gestionas via SSH/FTP
// 4. Forzar HTTPS en el panel de administración
define('FORCE_SSL_ADMIN', true);
// 5. Limitar revisiones de posts
define('WP_POST_REVISIONS', 5);
// 6. Vaciar papelera automáticamente cada 7 días
define('EMPTY_TRASH_DAYS', 7);
// 7. Modo debug OFF en producción (nunca en producción)
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);
// 8. Prefijo de tabla de BBDD (cambiarlo si es 'wp_' en instalación existente)
// $table_prefix = 'xk7p2_'; // Cambiar ANTES de la primera instalaciónPara cambiar el prefijo de tablas en una instalación existente: usa el plugin 'Change Table Prefix' o WP-CLI, no edites wp-config.php manualmente sin actualizar las tablas primero.
Firewall WAF: Wordfence vs Sucuri vs Cloudflare
Un WAF (Web Application Firewall) intercepta peticiones maliciosas antes de que lleguen a WordPress. Es la diferencia entre que el ataque llegue a tu servidor o se bloquee en el perímetro.
| Solución | Tipo | Precio | Mejor para |
|---|---|---|---|
| Wordfence Free | Plugin WordPress | Gratis | Webs pequeñas, presupuesto cero |
| Wordfence Premium | Plugin WordPress | 99$/año | Webs corporativas, reglas en tiempo real |
| Sucuri Firewall | DNS/Cloud WAF | 199$/año | Sitios con tráfico alto, DDoS protection |
| Cloudflare Pro | DNS/Cloud WAF | 20$/mes | Velocidad + seguridad + CDN integrado |
| Cloudflare Free | DNS básico | Gratis | Protección DDoS básica, no WAF completo |
Diferencia clave: plugin vs cloud WAF
Wordfence actúa dentro del servidor. El ataque ya llegó a tu hosting cuando Wordfence lo bloquea. Consume recursos del servidor.
Sucuri y Cloudflare actúan antes: el tráfico pasa por sus servidores antes de llegar al tuyo. Bloquean el ataque en el cloud. No consumen recursos de tu hosting. Más eficaz contra DDoS y ataques volumétricos.
Para webs corporativas estándar en España: Wordfence Premium es suficiente. Para tiendas con tráfico real o webs que han sufrido ataques: Cloudflare Pro o Sucuri Firewall.
Configurar Wordfence correctamente (no solo instalarlo)
Instalar Wordfence sin configurarlo es como poner una cerradura sin cerrar la puerta. Estos son los ajustes críticos:
# Instalar y activar
wp plugin install wordfence --activate --allow-rootConfiguración obligatoria post-instalación
- Wordfence > Firewall > Manage Firewall: cambia el modo de 'Learning Mode' a 'Enabled and Protecting'. Learning Mode no bloquea nada durante 7 días.
- Rate Limiting: activa límite de peticiones. Recomendado: humanos > 240/min, crawlers > 120/min, 404 > 60/min.
- Brute Force: bloquear IP tras 5 intentos fallidos en 4 horas. Bloqueo de 4 horas mínimo.
- Country Blocking: si tu negocio es solo España, bloquea países de origen de ataques frecuentes (RU, CN, BR). Atención: bloquear país bloquea también VPNs legítimas.
- Login Security > Two-Factor Authentication: actívalo para todos los administradores.
- Alerts: configura tu email para recibir alertas de ataques, usuarios nuevos con rol admin, y actualizaciones críticas.
Escaneo
# Ejecutar escaneo completo via WP-CLI
wp wordfence scan --type=all --allow-root
# Ver resultados
wp wordfence scan --output=json --allow-root | python3 -m json.tool
Autenticación de dos factores (2FA) en WordPress
El 2FA convierte el robo de contraseña en algo inútil. Sin el segundo factor (código del móvil), la contraseña correcta no da acceso.
Opciones de 2FA para WordPress
| Plugin | Método 2FA | Precio |
|---|---|---|
| Wordfence Premium | TOTP (Google Authenticator) | Incluido en Premium |
| WP 2FA | TOTP + Email + SMS | Gratis / 99$/año |
| Two Factor | TOTP + Email + FIDO2 | Gratis (plugin oficial WP) |
| Solid Security (iThemes) | TOTP + Email | Gratis / 99$/año |
Configuración con Wordfence
Wordfence > Login Security > Two-Factor Authentication. Actívalo para el rol 'Administrator'. Los usuarios reciben un código QR al siguiente login para escanear con Google Authenticator o Authy.
Forzar 2FA para todos los admins via WP-CLI
# Con el plugin WP 2FA instalado
# Listar admins sin 2FA activo
wp user list --role=administrator --format=table --allow-root
# Enviar email de activación de 2FA a todos los admins
wp wp2fa send-setup-emails --roles=administrator --allow-root
Hardening adicional: .htaccess y permisos de archivo
Estas reglas en .htaccess bloquean acceso directo a archivos sensibles y ataques comunes:
# Bloquear acceso a wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>
# Bloquear acceso a xmlrpc.php (si no lo usas)
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# Bloquear acceso a .htaccess
<Files .htaccess>
order allow,deny
deny from all
</Files>
# Bloquear hotlinking de imágenes
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www.)?tudominio.com [NC]
RewriteRule \.(gif|jpg|jpeg|png|webp)$ - [F,NC]
# Headers de seguridad
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options SAMEORIGIN
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"Permisos correctos de archivo
# Directorios: 755, archivos: 644, wp-config.php: 600
find /var/www/tudominio -type d -exec chmod 755 {} \;
find /var/www/tudominio -type f -exec chmod 644 {} \;
chmod 600 /var/www/tudominio/wp-config.php
# Verificar que wp-config.php tiene permisos correctos
ls -la /var/www/tudominio/wp-config.php
Ocultar la versión de WordPress y el login
La información de versión ayuda a los atacantes a saber qué vulnerabilidades probar. Ocultarla añade fricción.
Ocultar versión de WordPress
Añadir en functions.php del tema hijo:
// Ocultar versión WordPress del HTML y feeds
remove_action('wp_head', 'wp_generator');
add_filter('the_generator', '__return_empty_string');
add_filter('style_loader_src', function($src) {
if (strpos($src, 'ver=') !== false) {
$src = remove_query_arg('ver', $src);
}
return $src;
});
add_filter('script_loader_src', function($src) {
if (strpos($src, 'ver=') !== false) {
$src = remove_query_arg('ver', $src);
}
return $src;
});Cambiar URL del login
Por defecto en /wp-login.php y /wp-admin/. El plugin WPS Hide Login permite cambiarla a cualquier otra URL sin tocar core:
wp plugin install wps-hide-login --activate --allow-root
# Cambiar la URL del login en wp-admin > Ajustes > General > WPS Hide Login
# Ejemplo: /mi-panel-secretoImportante: guarda la nueva URL antes de guardar cambios. Si la pierdes, puedes restaurarla desactivando el plugin via FTP (renombrando la carpeta del plugin en wp-content/plugins).
Qué hacer si te han hackeado WordPress
Si detectas comportamiento extraño (redirects a sitios externos, páginas nuevas que no creaste, Google te muestra como 'sitio peligroso'), sigue estos pasos:
1. Aislar la web (modo mantenimiento)
wp maintenance-mode activate --allow-root2. Escanear y identificar archivos infectados
# Buscar archivos PHP modificados en las últimas 72 horas
find /var/www/tudominio -name '*.php' -newer /tmp/reference.txt -type f
# Buscar strings maliciosos comunes
grep -r 'eval(base64_decode' /var/www/tudominio --include='*.php' -l
grep -r 'preg_replace.*\$_' /var/www/tudominio --include='*.php' -l
grep -r 'shell_exec' /var/www/tudominio --include='*.php' -l3. Reinstalar WordPress core
wp core download --force --allow-root
wp core update --allow-root4. Reinstalar plugins desde repositorio oficial
# Lista los plugins instalados
wp plugin list --format=csv --allow-root
# Reinstalar todos desde WordPress.org
wp plugin install $(wp plugin list --format=csv --fields=name --allow-root | tail -n +2) --force --allow-root5. Cambiar todas las contraseñas
# Cambiar contraseña de todos los usuarios admin
wp user list --role=administrator --format=ids --allow-root | \
xargs -I {} wp user update {} --user_pass=$(openssl rand -base64 16) --allow-root
# Cambiar claves de autenticación en wp-config.php
# (visita https://api.wordpress.org/secret-key/1.1/salt/ y reemplaza)6. Solicitar revisión a Google
Si Google marcó tu web como 'peligrosa': Google Search Console > Seguridad e Acciones manuales > Solicitar revisión. Tarda entre 1 y 3 días hábiles en resolverse una vez limpiada la web.
Checklist de seguridad WordPress 2026: resumen visual
Estado de seguridad de tu WordPress en 10 verificaciones:
| Verificación | Cómo comprobarlo | Estado ideal |
|---|---|---|
| WordPress core actualizado | wp core version --extra | Última versión estable |
| Plugins sin vulnerabilidades | WPScan o Patchstack Scanner | 0 vulnerabilidades activas |
| 2FA activado para admins | Wordfence > Login Security | Todos los admins con 2FA |
| Contraseñas fuertes | Wordfence > Diagnostics | Sin contraseñas débiles |
| Firewall WAF activo | Wordfence > Firewall > Status | Enabled and Protecting |
| SSL activo y válido | curl -I https://tudominio.com | HTTPS, cert válido |
| Backup reciente | UpdraftPlus > Backups | <24h para BBDD |
| Permisos wp-config.php | ls -la wp-config.php | -rw------- (600) |
| Sin plugins nulled/pirata | Revisión manual | Solo fuentes oficiales |
| Registros de login revisados | Wordfence > Live Traffic | Sin fuerza bruta activa |
Coste real de la seguridad WordPress en 2026
La seguridad en WordPress no necesita ser cara. Estas son las opciones por presupuesto:
| Presupuesto | Stack recomendado | Coste/año |
|---|---|---|
| Cero (DIY) | Wordfence Free + WP 2FA Free + UpdraftPlus Free + hardening manual | 0€ |
| Básico | Wordfence Premium + UpdraftPlus Free | ~95€/año |
| Estándar | Wordfence Premium + UpdraftPlus Premium | ~165€/año |
| Profesional | Cloudflare Pro + Wordfence Premium + UpdraftPlus Premium | ~405€/año |
| Enterprise | Sucuri Firewall + ManageWP + BlogVault | 600-800€/año |
Para el 90% de webs corporativas en España, el stack 'Básico' (Wordfence Premium + UpdraftPlus gratuito) cubre todos los riesgos reales a menos de 100€/año.
En WebsBarcelona incluimos Wordfence Premium y backups offsite en todos los planes de mantenimiento sin coste adicional. El coste del plugin se amortiza con la primera hora que no tienes que dedicar a limpiar un hackeo.
Preguntas frecuentes
WordPress core es seguro. El problema son los plugins y temas de terceros, que representan el 73% de los vectores de ataque. Un WordPress con pocos plugins actualizados, contraseñas fuertes y 2FA tiene un perfil de seguridad excelente. La inseguridad viene de la negligencia en el mantenimiento, no del CMS.
Wordfence gratuito recibe las reglas de firewall con 30 días de retraso. Premium las recibe en tiempo real. En esos 30 días, tu web es vulnerable a ataques que Wordfence ya conoce y bloquea en Premium. Para webs que generan ingresos o tienen datos de clientes, los 99$/año de Premium son una inversión obvia.
Señales principales: Google muestra tu web como 'sitio peligroso', hay redirecciones a otras páginas que no configuraste, ves páginas o usuarios nuevos que no creaste, tu hosting te avisa de uso anormal de CPU, recibes quejas de clientes sobre spam enviado desde tu dominio. En todos estos casos, ejecuta un escaneo de Wordfence inmediatamente.
Si no usas aplicaciones que requieren XML-RPC (como la app móvil de WordPress o Jetpack), sí. xmlrpc.php es un vector de ataque frecuente para fuerza bruta porque permite múltiples intentos de contraseña en una sola petición. Puedes bloquearlo en .htaccess o con Wordfence sin afectar la funcionalidad de la web.
Hardening es el proceso de reducir la superficie de ataque: deshabilitar funcionalidades no usadas (editor de archivos, xmlrpc, registro de usuarios si no se necesita), establecer permisos de archivo correctos, ocultar información de versión, forzar HTTPS, y añadir headers de seguridad HTTP. No requiere plugins: la mayoría se hace editando wp-config.php y .htaccess.
Protege contra fuerza bruta y robo de contraseñas. No protege contra vulnerabilidades de sesión (session hijacking) ni contra ataques a plugins que tengan su propio sistema de autenticación. Es una capa necesaria, no suficiente. Combinado con Wordfence (bloqueo de IP tras intentos fallidos) y contraseñas fuertes, la protección es prácticamente completa.
Depende del objetivo. Cloudflare Pro (20$/mes) ofrece CDN + WAF + DDoS protection global con mejor rendimiento. Sucuri Firewall (199$/año) está más especializado en WordPress con detección de malware integrada y soporte de respuesta a incidentes incluido. Para webs con tráfico alto: Cloudflare. Para webs que han tenido incidentes de seguridad: Sucuri.
Depende de la gravedad. Infecciones simples (archivos infectados en wp-content) son manejables con WP-CLI siguiendo el proceso documentado en este artículo. Hackeos avanzados con backdoors en el core, modificación de .htaccess o inyección en la base de datos requieren experiencia o un servicio profesional. Sucuri ofrece limpieza manual por 199$/incidente.
En resumen
La seguridad en WordPress en 2026 no es opcional: es mantenimiento básico. Wordfence Premium + 2FA + hardening de wp-config cuesta menos de 100€/año y elimina el 95% del riesgo real. El 5% restante lo cubre un buen plan de backups.
En WebsBarcelona aplicamos este stack de seguridad en todas las webs bajo mantenimiento desde el primer día. Sin configuración adicional, sin facturas extra por plugins de seguridad.
¿Necesitas una web profesional en Barcelona?
Presupuesto cerrado en 24h sin compromiso. Desde 99€.
Pedir presupuesto →Somos tu diseño web en Barcelona para pymes y autónomos · Ver portfolio