NUDAYOSH

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:

  1. 5 min: actualiza todo (#1) y borra plugins/themes que no usas (#2)
  2. 10 min: configura Cloudflare gratis siguiendo la guía — incluye HTTPS + bloqueo XML-RPC + bloqueo por país (#5 + #8)
  3. 10 min: instala el plugin NUDAYOSH Security y pulsa "Aplicar hardening" — aplica #3, #4, #5 (refuerzo), #7, #9, #10 de golpe + auto-mitigation
  4. 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.