BLOG · 2026-06-01
Hardening WordPress: las 10 cosas que SÍ funcionan
Internet está lleno de listas de "100 cosas para securizar WordPress" donde 80 son ruido o placebo. Aquí va la versión corta y honesta: las 10 medidas que reducen el 95% del riesgo, y 5 mitos que no merecen tu tiempo.
Lo que SÍ funciona (las 10)
1. Mantener WordPress, plugins y temas actualizados CRÍTICO
El 80% de los hacks vienen de versiones desactualizadas con vulnerabilidades públicas conocidas. Activa auto-updates para todo: core, plugins, temas, traducciones. Sí, alguna vez se romperá algo — pero menos veces de las que te llegará un aviso de infección si no lo haces.
Cómo: Dashboard → Updates + plugin Easy Updates Manager. O instala el plugin NUDAYOSH Security que monitoriza qué versiones están en riesgo.
2. Eliminar plugins y temas que no usas CRÍTICO
Cada plugin desactivado que está instalado sigue siendo un vector de ataque: sus archivos están ahí, el atacante puede explotar la vulnerabilidad directamente accediendo a su URL. Desactivado no es lo mismo que desinstalado. Borra todo lo que no usas.
3. Bloquear ejecución PHP en /uploads/ CRÍTICO
La carpeta wp-content/uploads/ es para imágenes y documentos. No tiene ningún caso
de uso legítimo de PHP ejecutable. Bloquea cualquier .php que aparezca ahí —
siempre será malware.
Cómo manual: añade un .htaccess en uploads con <FilesMatch "\.php$">Require all denied</FilesMatch>.
Cómo automático: el plugin NUDAYOSH los mueve a cuarentena al
detectarlos, sin esperar a que tú actúes (lee
por qué la auto-mitigation cambia el juego).
4. Deshabilitar el editor de archivos en wp-admin RECOMENDADO
Por defecto, un admin puede editar el código del theme y de los plugins desde Apariencia → Editor.
Si te roban credenciales admin, el atacante usa esa puerta para meter código sin necesidad de FTP.
Cerrarla es una línea en wp-config.php:
define( 'DISALLOW_FILE_EDIT', true );
5. Bloquear XML-RPC RECOMENDADO
XML-RPC es un protocolo viejo que sigue activo por compatibilidad con apps móviles antiguas y Jetpack. Si no usas ninguno, desactívalo — es vector típico de brute force amplificado y DDoS via pingback.
add_filter( 'xmlrpc_enabled', '__return_false' );
O bloquéalo directamente en .htaccess con <Files xmlrpc.php>Require all denied</Files>.
6. Auto-block IPs tras N login fails CRÍTICO
El 60% del tráfico que recibe tu wp-login es brute force automatizado desde botnets. Sin un mecanismo de bloqueo automático, esos bots tienen literalmente todo el tiempo del mundo para probar contraseñas.
La regla: 10 fails en 10 minutos = IP bloqueada 4 horas. Lo hace NUDAYOSH Security de serie. Limit Login Attempts también funciona. O súbelo a nivel Cloudflare: guía aquí.
7. Headers de seguridad en .htaccess CRÍTICO
Aunque tu WP esté limpio, sin estos headers cualquier XSS o iframe injection es más explotable de lo
necesario. Añade en el .htaccess raíz:
<IfModule mod_headers.c>
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 Permissions-Policy "geolocation=(), microphone=(), camera=()"
Header always unset X-Powered-By
</IfModule>
8. SSL real + HSTS forzado CRÍTICO
Sin HTTPS, todo lo que tu cliente o tú escribís en el wp-admin viaja en plano. Plesk y casi todos los
hostings tienen Let's Encrypt gratis. Actívalo y, además, fuerza redirección 301 de
HTTP → HTTPS en .htaccess:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
9. Deshabilitar enumeración de usuarios RECOMENDADO
Por defecto, WP filtra los nombres de tus usuarios admin vía:
/?author=1(redirect a/author/admin/)/wp-json/wp/v2/users(lista JSON sin autenticar)
Ambas son la primera pieza de un brute force inteligente. Bloquea con:
// En functions.php o un mu-plugin:
add_filter( 'rest_authentication_errors', function( $r ) {
if ( ! is_user_logged_in() && strpos( $_SERVER['REQUEST_URI'], '/wp-json/wp/v2/users' ) !== false ) {
return new WP_Error( 'rest_forbidden', 'Forbidden', array( 'status' => 403 ) );
}
return $r;
});
Y en .htaccess:
RewriteCond %{QUERY_STRING} author=\d
RewriteRule ^ /? [L,R=301]
10. File Integrity Monitor CRÍTICO
Las 9 medidas anteriores reducen la probabilidad de ataque. El FIM (File Integrity Monitor) te avisa cuando hay un cambio sospechoso — porque ningún hardening es 100%.
Cómo funciona: el plugin guarda hashes SHA256 de todos tus archivos. Cada hora compara con el estado actual. Si aparece un archivo nuevo, se modificó uno existente, o desapareció algo, te avisa (y si tiene auto-mitigation, actúa).
Wordfence y NUDAYOSH lo hacen. Sin FIM, una infección puede pasar 6 meses sin que te enteres.
Lo que NO funciona (5 mitos)
1. Renombrar wp-login.php PLACEBO
Plugins como WPS Hide Login mueven /wp-login.php a /mi-login-secreto/. Suena
bien — esconde el endpoint, no? Pero no es seguridad, es ofuscación. Un bot serio
prueba 30 rutas comunes en 2 segundos. Y si tu URL aparece en cualquier referrer (Google Analytics,
algún email que envías al cliente con un enlace), está expuesta.
El tiempo que dedicas a esto es mejor usado en bloqueo por IP y por país (medidas 6 + Cloudflare). Eso sí frena bots.
2. Cambiar el prefijo de tabla wp_ a wpxyz_ PLACEBO
Idea: si el prefijo es wp_, un ataque SQL injection conoce los nombres de tabla. Si lo
cambias, no.
Realidad: cualquier SQL injection grave ejecuta primero SHOW TABLES y descubre el prefijo
en milisegundos. No detiene a nadie. Solo te da problemas migrando o restaurando
backups.
3. Plugins de seguridad "todo en uno" DEPENDE
Wordfence/iThemes/Sucuri marketean como "protección total". La verdad: hacen 30 cosas y de esas, 10 son útiles, 10 son ruidosas, y 10 se solapan con lo que ya hace Plesk o Cloudflare.
Si vas a usar uno, elige uno que sea explícito sobre qué hace y por qué, y úsalo combinado con Cloudflare a nivel perimetral. No confíes en que un único plugin lo cubra todo.
4. CAPTCHA en formularios públicos CASI INÚTIL
Los CAPTCHAs de Google reCAPTCHA v2/v3 ya no frenan a casi ningún bot moderno (los pasan vía Anti-Captcha o headless browsers). Lo que sí frena spam: honeypots (campos invisibles que solo los bots rellenan) y rate limiting por IP.
5. "Cambiar la contraseña cada 30 días" CONTRAPRODUCENTE
Forzar cambios de contraseña frecuentes hace que la gente use contraseñas predecibles (Verano2026!, Otoño2026!...) o las apunte en post-its. NIST lo desaconseja desde 2017.
Mejor: contraseñas largas únicas por sitio (gestor de contraseñas) + 2FA en wp-admin (plugin Two-Factor). Cambias solo si hay sospecha de leak.
El plan de 30 minutos
Si tienes 30 minutos hoy:
- 5 min: actualiza todo (#1) y borra plugins/themes que no usas (#2)
- 10 min: configura Cloudflare gratis siguiendo la guía — incluye HTTPS + bloqueo XML-RPC + bloqueo por país (#5 + #8)
- 10 min: instala el plugin NUDAYOSH Security y pulsa "Aplicar hardening" — aplica #3, #4, #5 (refuerzo), #7, #9, #10 de golpe + auto-mitigation
- 5 min: activa 2FA en tu cuenta admin con el plugin Two-Factor
Has cubierto las 10 medidas críticas. Tu web ahora es significativamente más segura que el 90% de WordPress en internet. Sin gastar un euro y sin necesitar conocimientos técnicos avanzados.
El stack mínimo
Cloudflare gratis + plugin NUDAYOSH Security con auto-mitigation activa + 2FA en admin + auto-updates. Cero euros. Una tarde. Mejor que la mayoría de planes de 50€/mes.
