Hardening de WordPress: 20 medidas de seguridad esenciales (2026)
WordPress alimenta el 43% de las webs del mundo. Eso lo convierte en el CMS más usado, pero también en el más atacado. Cada día se producen millones de intentos de login automatizados contra sitios WordPress en todo el mundo.
La buena noticia: la mayoría de hackeos no son por fallos del core de WordPress (que se actualiza solo desde 2013), sino por plugins desactualizados, temas abandonados, contraseñas débiles y configuraciones por defecto inseguras. Y todos esos son problemas que puedes solucionar tú.
En esta guía te doy 20 medidas de hardening concretas, ordenadas por impacto, con ejemplos de código listos para copiar.
📑 Contenido del artículo
1. Por qué WordPress es tan atacado
Los tres motivos principales:
- Cuota de mercado: si vas a atacar un CMS, atacas el más usado.
- Ecosistema de plugins: más de 60.000 plugins, muchos abandonados o con vulnerabilidades. Un solo plugin mal mantenido puede tumbar tu web.
- Errores humanos: contraseñas débiles, falta de actualizaciones, permisos mal configurados.
Según datos de Wordfence, el 96% de los hackeos a WordPress se deben a:
- Plugins y temas vulnerables (55%)
- Contraseñas débiles o reutilizadas (28%)
- Configuraciones inseguras (13%)
Todo esto es prevenible con las medidas que te explico a continuación.
2. Nivel 1 — Medidas críticas (hazlo hoy)
Si solo puedes hacer 7 cosas, haz estas. Son las de mayor impacto.
wp_ por defecto en todas las tablas. Cambiarlo dificulta los ataques de SQL injection automatizados. Hazlo solo en instalaciones nuevas o con un plugin específico.
Carpetas: 755
Ficheros: 644
wp-config.php: 600 (o 440)
.htaccess: 644
Nunca 777. Es una invitación al hackeo.
wp-config.php:
define('DISALLOW_FILE_EDIT', true);
3. Nivel 2 — Hardening intermedio
Cuando ya tengas lo anterior, sube al siguiente nivel.
wp-config.php:
define('DISALLOW_FILE_MODS', true); // No permitir instalar plugins/temas desde el panel
define('AUTOMATIC_UPDATER_DISABLED', true); // Control manual de actualizaciones
define('WP_DEBUG', false); // Sin debug en producción
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);
.htaccess raíz:
<files wp-config.php>
order allow,deny
deny from all
</files>
Options -Indexes
xmlrpc.php es un endpoint usado por herramientas antiguas y por atacantes para fuerza bruta. Si no lo usas (Jetpack, apps móviles), bloquéalo:
<files xmlrpc.php>
order allow,deny
deny from all
</files>
wp-login.php a una URL personalizada (cambia la URL de login).
functions.php:
remove_action('wp_head', 'wp_generator');
add_filter('the_generator', '__return_empty_string');
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?tudominio\.com/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|png|webp)$ - [F]
4. Nivel 3 — Blindaje avanzado
Si tu WordPress maneja datos sensibles (clientes, pagos, información médica), aplica estas medidas adicionales.
/wp-login.php, usa /acceso-secreto-2026. Plugins como WPS Hide Login lo hacen con un clic. Reduce drásticamente los ataques automatizados.
.htaccess o en Nginx:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Content-Security-Policy "default-src 'self'; frame-ancestors 'self'"
Más info en la guía de cabeceras HTTP.
/wp-json/) puede exponer información. Si no la usas para nada externo, bloquéala:
add_filter('rest_authentication_errors', function($result) {
if (!empty($result)) return $result;
if (!is_user_logged_in()) {
return new WP_Error('rest_not_logged_in', 'Acceso no autorizado.', array('status' => 401));
}
return $result;
});
?author=1. Los atacantes usan esto para descubrir nombres de usuario válidos. Añade en functions.php:
if (!is_admin()) {
if (isset($_REQUEST['author']) && !is_numeric($_REQUEST['author'])) {
wp_die('Acceso no autorizado.', 'Error', array('response' => 403));
}
}
5. Plugins de seguridad recomendados
No necesitas 10 plugins. Con 2-3 bien elegidos es suficiente:
- Wordfence Security: firewall + escaneo de malware + límite de login. Plan gratuito muy completo.
- Solid Security (antes iThemes): hardening todo-en-uno, muy configurable.
- Sucuri Security: escaneo de malware + WAF (versión de pago).
- WPS Hide Login: cambia la URL de login.
- UpdraftPlus: backups automáticos a la nube.
- WP 2FA: autenticación de dos factores.
- Limit Login Attempts Reloaded: bloqueo de fuerza bruta.
6. Mantenimiento continuo
El hardening no es algo que se hace una vez. Es un proceso continuo. Rutina recomendada:
- Semanal: revisar actualizaciones de plugins y temas.
- Mensual: revisar usuarios, logs de intentos de login, backups funcionando.
- Trimestral: auditoría de seguridad completa (con Sealgrade, por ejemplo).
- Anual: revisión profunda de la arquitectura, prueba de restauración, renovación de certificados.
7. Conclusión
WordPress es seguro si lo configuras bien. El resumen en 8 líneas:
- Actualiza core, plugins y temas.
- Contraseñas fuertes + 2FA en todos los accesos.
- Limita intentos de login.
- Permisos correctos en ficheros (644/755).
- Desactiva edición de ficheros desde el panel.
- Añade un WAF (Cloudflare es gratis).
- Backups automáticos off-site.
- Auditoría externa periódica.
Con estas medidas, tu WordPress estará mejor protegido que el 90% de las webs del mundo. No es paranoia, es higiene digital.
🎯 ¿Está tu WordPress protegido?
Audítalo gratis en 30 segundos con Sealgrade. Detecta ficheros sensibles, puertos abiertos, cabeceras y más.
🔍 Auditar mi WordPress →