Lista para endurecer la seguridad de WordPress: 12 pasos ordenados por datos reales de ataques
Esta lista de comprobación para endurecer la seguridad de WordPress tiene doce pasos, y su orden sale de lo que de verdad golpeó a los sitios WordPress de la red ReportedIP entre el 4 de julio y el 1 de octubre de 2026: 36.548 eventos de ataque desde 18.378 direcciones. Los escáneres en busca de archivos de configuración, plugins y números de versión supusieron más de la mitad, la adivinación de contraseñas quedó en segundo lugar, y los exploits de los que todo el mundo escribe fueron unos cientos de eventos al final de la lista.
Cada paso indica qué cierra, qué puede romper y dónde está el interruptor en ReportedIP Hive. El núcleo de detección y bloqueo del plugin es gratuito; los pasos que necesitan el plan Professional lo dicen. La interfaz del plugin está en inglés, y las etiquetas se citan tal cual. Para la mayor parte no hace falta ser desarrollador: ocho de los doce pasos son interruptores en un único plugin gratuito, y el plugin te muestra cuáles siguen apagados.
Si solo tienes diez minutos: la versión corta
La versión corta lleva unos diez minutos y cubre los pasos que frenan la mayor parte del tráfico de la tabla de abajo.
- Descarga ReportedIP Hive e instálalo como cualquier otro plugin: Plugins, Añadir nuevo, Subir plugin, elige el archivo zip, Activar.
- Ejecuta el Quickstart que el plugin abre tras la activación. Elige el modo, pega tu clave si tienes una, activa la protección. Sensores, cortafuegos y bloqueo progresivo vienen preajustados para tu plan.
- Abre el panel y repasa el Hardening Score. Cada elemento que todavía dice Enable enlaza con su interruptor. El segundo factor para tu propia cuenta es el primero que debes activar.
El plugin es gratuito y de código abierto. Professional añade después las partes gestionadas, desde la misma pantalla.
Qué atacó a los sitios WordPress en los últimos 90 días
Las cifras de abajo son los eventos de ataque que sitios y servidores WordPress notificaron a la red ReportedIP a través de su API en esos 90 días, contados por categoría. El tráfico de los honeypots queda fuera, y un evento con varias categorías se cuenta una vez en cada una de ellas. El paso de la lista que cierra cada vector está en la última columna.
| Tipo de ataque | Eventos | Direcciones | Lo cierra el paso |
|---|---|---|---|
| Búsqueda de archivos de configuración y copias de seguridad | 16.548 | 7.549 | 2 y 3 |
| Escaneo de plugins | 16.308 | 7.515 | 1 y 3 |
| Escaneo de versiones | 16.184 | 7.480 | 3 |
| Fuerza bruta en el inicio de sesión | 11.235 | 8.010 | 4, 5 y 8 |
| Enumeración de usuarios | 6.130 | 3.026 | 6 |
| Falsos bots de buscadores | 1.978 | 382 | 11 |
| Fuerza bruta por XML-RPC | 681 | 237 | 7 |
| Intentos de explotar plugins | 574 | 149 | 1 y 11 |
| Abuso de la API REST | 357 | 128 | 7 |
De la tabla salen dos conclusiones. El grueso del tráfico es reconocimiento, así que un sitio que no revela nada recibe menos ataques de seguimiento. Y el pequeño número de intentos de explotación es la única fila que acaba en una intrusión, por eso las actualizaciones siguen arriba aunque las filas de escaneo sean casi treinta veces mayores.
La lista de endurecimiento de un vistazo
| Paso | Esfuerzo | Puede romper | En ReportedIP Hive |
|---|---|---|---|
| 1. Actualizar y eliminar plugins | Recurrente | Un tema o plugin tras una actualización mayor | No es tarea del plugin |
| 2. Bloquear los archivos | Una vez | Plugins que escriben en su propia carpeta | Block PHP execution in uploads |
| 3. Ocultar las huellas de versión | Una vez | Nada | Hide software fingerprints |
| 4. Endurecer el inicio de sesión | Una vez | Direcciones compartidas de una oficina | Bloqueo progresivo, política de contraseñas |
| 5. Exigir el segundo factor | Una vez por rol | Usuarios sin teléfono | Two-Factor Authentication |
| 6. Frenar la enumeración de usuarios | Una vez | Páginas de autor públicas | Defensa contra la enumeración |
| 7. Cerrar XML-RPC y REST | Una vez | Jetpack, la app móvil, montajes headless | Access Lockdown |
| 8. Ocultar la página de inicio de sesión | Una vez | Los marcadores de tus editores | Hide Login |
| 9. Enviar cabeceras de seguridad | Una vez | Incrustaciones y una CSP estricta | Security Headers |
| 10. HTTPS, PHP y proxies | Una vez | Plugins viejos sobre un PHP nuevo | Fuentes de proxy de confianza |
| 11. Poner un cortafuegos delante | Una vez | Formularios que envían código | Web Application Firewall |
| 12. Copias de seguridad y supervisión | Recurrente | Nada | System Status |
1. Actualizar el núcleo, los plugins y los temas, y eliminar lo que no usas
El escaneo de plugins fue la segunda fila más grande de la tabla por una razón: un escáner que sabe qué plugins y versiones corre un sitio puede cruzarlos con las vulnerabilidades publicadas y volver con el único exploit que encaja. Los 574 intentos de explotación son el final de esa cadena. Una instalación con los plugins al día no tiene nada en lo que esa cadena pueda terminar.
- Activa las actualizaciones automáticas del núcleo de WordPress, al menos para las versiones menores, que traen las correcciones de seguridad.
- Actualiza plugins y temas con un calendario, cada semana en la mayoría de los sitios, el mismo día para un plugin con una vulnerabilidad publicada.
- Elimina los plugins y temas inactivos. Un plugin inactivo sigue teniendo archivos en disco, y un escáner lee archivos, no el estado de activación.
- Prueba las actualizaciones grandes en una copia de staging antes de que lleguen al sitio en producción, sobre todo WooCommerce y los maquetadores.
Si nadie en la empresa se hace cargo de ese calendario, dáselo a alguien que lo cumpla cada semana. El mantenimiento WordPress de CMS ADMINS, el equipo de Múnich detrás de ReportedIP, aplica las actualizaciones a un ritmo fijo, con un entorno de staging en los planes mayores, hace copias de seguridad diarias, supervisa el sitio las 24 horas y aloja en servidores alemanes para los clientes que quieren mantenimiento y alojamiento con un solo interlocutor.
2. Bloquear wp-config.php, los permisos de archivos y el editor de archivos
La fila más grande de la tabla, 16.548 eventos, son escáneres pidiendo copias de seguridad y archivos de configuración que nunca deberían poder leerse desde fuera. Tres ajustes cierran la mayor parte de esa superficie.
Añade estas dos líneas a wp-config.php por encima de la línea que dice que la edición termina ahí. La primera quita el editor de temas y plugins de wp-admin, así que una sesión de administrador robada no puede pegar PHP en tu tema. La segunda detiene el instalador de plugins y temas, que solo quieres en un sitio donde cada cambio pasa de todos modos por un despliegue.
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', true ); // solo si despliegas los plugins tú mismo
Aplica los permisos de archivos que recomienda la guía de endurecimiento de WordPress: directorios en 755, archivos en 644, y wp-config.php en 600 para que solo el usuario del servidor web pueda leerlo. Nunca dejes al lado una copia llamada wp-config.php.bak o wp-config.old; un servidor web la sirve en texto plano, y eso es exactamente lo que pedían las 16.548 peticiones.
find /ruta/del/sitio -type d -exec chmod 755 {} \;
find /ruta/del/sitio -type f -exec chmod 644 {} \;
chmod 600 /ruta/del/sitio/wp-config.php
La carpeta de subidas es el único lugar donde un visitante puede dejar un archivo en tu servidor. Hive añade una regla que se niega a ejecutar PHP dentro de ella, así que un script que entre por un formulario de subida roto no puede ejecutarse. En Apache el plugin escribe la regla él mismo en el .htaccess de las subidas; en nginx muestra un fragmento para pegar. El interruptor es Block PHP execution in uploads bajo Protection, Firewall & Bots, Access Lockdown.
Si editar archivos en el servidor no es lo tuyo, quédate solo con el último interruptor y pide a tu proveedor de alojamiento las dos líneas y los permisos. Para un proveedor es cosa de cinco minutos.
3. Dejar de entregar tus números de versión a los escáneres
WordPress escribe su versión en el código fuente de la página, en los feeds y en las URL de scripts y estilos, y 16.184 eventos en 90 días fueron escáneres leyendo exactamente eso. Quitar las huellas no arregla nada por sí solo. Deja de entregar al escáner la lista de lo que probar a continuación, y por eso este paso va tan pronto para lo poco que cuesta.
En Hive el interruptor es Hide software fingerprints, en la misma sección Access Lockdown. Dos cosas más atrapan a los escáneres a la entrada: el detector de escaneos cuenta las rutas fallidas por dirección y bloquea tras una ráfaga, y las rutas señuelo responden a una petición de un archivo que no existe en ningún sitio real con un bloqueo y un aviso a la red. Ambos son gratuitos y vienen activados; la guía de rutas señuelo explica qué hacen y qué no.

4. Encarecer el inicio de sesión: nombres únicos, contraseñas fuertes, bloqueos progresivos
La fuerza bruta en el inicio de sesión fueron 11.235 eventos desde 8.010 direcciones, la dispersión más amplia de todas las filas: la mayoría de esas direcciones probó unas pocas veces y siguió adelante. Ese patrón decide la defensa. Bloquear solo por dirección no escala frente a 8.010 de ellas, así que la contraseña tiene que ser imposible de adivinar y los intentos tienen que costarle algo al atacante.
- Ninguna cuenta llamada admin. Crea un administrador nuevo con un nombre que nadie pueda adivinar, inicia sesión con él, borra el antiguo y asigna su contenido a la cuenta nueva.
- Contraseñas fuertes y únicas, con comprobación de filtraciones. La política de contraseñas de Hive fija una longitud mínima y clases de caracteres y puede cotejar una contraseña nueva con las filtraciones conocidas sin enviar la contraseña a ninguna parte.
- Bloqueo progresivo en vez de un veto plano. Hive cuenta los inicios de sesión fallidos por dirección y bloquea unos minutos en la primera infracción y días en las reincidencias, así que un compañero con un error de tecleo no se queda fuera un día entero. La guía de bloqueo por fuerza bruta recorre la escalera.
- Comparte lo que aprendes. En el modo Community Network, una dirección que otros sitios ya han notificado se rechaza antes de comprobar la contraseña, y tus propios bloqueos ayudan al siguiente sitio.
5. Exigir la autenticación en dos pasos a cada rol que pueda editar
Un segundo factor es el único paso que deja sin valor una contraseña robada o adivinada, y por eso es el elemento de más peso en la puntuación de endurecimiento. Hive trae cuatro métodos: una app de autenticación, passkeys y llaves físicas, un código por correo, y SMS en el plan Professional a través del relé gestionado. Los tres primeros son gratuitos en todos los planes, incluido el modo Local Shield totalmente sin conexión.
Exigirlo a un rol es lo que cuenta. Bajo Protection, Core protection, Two-Factor Authentication, elige los roles que deben usar un segundo factor, administradores y editores como mínimo. Los usuarios tienen un periodo de gracia para configurarlo, los códigos de recuperación cubren la pérdida de un teléfono, y el flujo de restablecimiento de contraseña pide también el segundo factor, así que un buzón robado no puede saltárselo. La guía de autenticación en dos pasos compara los cuatro métodos.
Professional añade la escalada adaptativa: un inicio de sesión desde un país nuevo, una red nueva o un dispositivo nuevo vuelve a pedir el segundo factor, incluso en un dispositivo de confianza. Para una tienda, la variante de escaparate muestra el desafío dentro del tema de WooCommerce en Mi cuenta y en el pago.
6. Frenar la enumeración de usuarios
Antes de adivinar contraseñas, un bot quiere nombres de usuario, y WordPress los reparte en cuatro sitios: la redirección ?author=1, el endpoint de usuarios de la API REST, la respuesta oEmbed y el error de inicio de sesión que dice si lo incorrecto era el nombre o la contraseña. Los 6.130 eventos de enumeración son bots recogiendo nombres para los 11.235 intentos de inicio de sesión de arriba.
La defensa contra la enumeración de Hive cierra los cuatro de golpe y cuenta las sondas por dirección, así que un bot que insiste queda bloqueado. Los sitios que enlazan a sus páginas de autor pueden dejarlas públicas; las otras tres siguen cerradas. El interruptor viene activado bajo Protection, Core protection.
7. Cerrar XML-RPC, la API REST y las demás puertas que no usas
La fuerza bruta por XML-RPC y el abuso de la API REST sumaron juntos cerca de mil eventos, mucho menos que la página de inicio de sesión, y son los dos interruptores con más probabilidad de romper algo. Así que prueba antes de confiar en ellos. XML-RPC lo necesitan la app de Jetpack, la app móvil de WordPress y algunas herramientas de publicación; la API REST la usan el editor de bloques, la mayoría de los plugins de formularios y de tienda y cualquier front-end headless.
El Access Lockdown de Hive ofrece los interruptores con el término medio ya incorporado. Disable XML-RPC apaga del todo el endpoint y los pingbacks; si lo necesitas, un segundo interruptor quita solo el método multicall que mete cientos de intentos de contraseña en una única petición. REST API access puede quedar abierto, limitarse a usuarios con sesión o restringirse a roles elegidos, con una lista de espacios de nombres que siguen siempre accesibles para un banner de cookies o un plugin de tienda. Disable RSS and Atom feeds es para sitios a los que nadie está suscrito.
Cada interruptor es gratuito, viene apagado y se revierte desde la misma pantalla. La lista completa está en la documentación de Access Lockdown.
8. Ocultar la página de inicio de sesión y cerrar wp-admin a los visitantes
Mover la página de inicio de sesión fuera de wp-login.php no detiene a un atacante dirigido, pero saca el sitio de cada barrido automatizado que prueba la dirección por defecto, que es donde empieza la mayor parte de la adivinación de contraseñas. El Hide Login de Hive fija un slug propio, decide qué responde la dirección antigua y registra lo que todavía la pide. Close wp-admin for visitors aparta a los visitantes sin sesión del área de administración en vez de mostrarles el formulario.
Avisa a tus editores de la nueva dirección antes de cambiar, y ten presente la lista blanca del plugin para la red de la oficina: una dirección que está en ella nunca se bloquea, haga lo que haga.
9. Enviar cabeceras de seguridad
Las cabeceras de respuesta le dicen al navegador qué debe rechazar: adivinar un tipo de archivo, enmarcar tus páginas en un sitio ajeno, filtrar la dirección completa cuando un visitante sigue un enlace, o volver a HTTP. Las tres básicas, X-Content-Type-Options, X-Frame-Options y Referrer-Policy, son gratuitas en Hive y seguras en casi cualquier sitio. HSTS, Permissions-Policy, una Content-Security-Policy que arranca en modo solo informe y el trío cross-origin vienen con Professional.
Dos advertencias sacadas de la propia pantalla de ajustes: nunca actives HSTS antes de que HTTPS funcione en todas partes, porque los navegadores lo recuerdan durante el periodo que fijes, y ejecuta siempre una Content-Security-Policy primero en modo solo informe, porque una política impuesta demasiado estricta hace que una página parezca rota. Las cabeceras que tu servidor ya envía se detectan y se dejan en paz. Comprueba el resultado desde fuera con el Security Header Check.
Si nada de esto te dice algo: activa las tres cabeceras básicas y deja el resto apagado. Solo eso ya es más de lo que envía la mayoría de los sitios.

10. HTTPS, una versión de PHP al día y la dirección real del cliente
Tres cosas pertenecen a la capa de alojamiento y ningún plugin puede hacerlas por ti. HTTPS con un certificado válido en cada subdominio, porque cada paso de arriba da por hecho que la cookie de sesión viaja cifrada. Una versión de PHP que todavía recibe correcciones de seguridad, porque un PHP sin soporte es una vulnerabilidad a la que no le llegará ningún parche. Y, detrás de Cloudflare o de cualquier proxy inverso, la cabecera que lleva la dirección real del visitante.
El último punto decide si funcionan todos los demás pasos. Si el plugin ve la dirección del proxy en vez de la del visitante, bloquea al proxy y deja pasar al atacante. El ajuste de proxy de confianza de Hive toma la cabecera y los rangos del proxy; la página System Status avisa cuando hay una cabecera configurada sin rangos. Si prefieres no cargar en absoluto con la capa de alojamiento, los planes de mantenimiento de CMS ADMINS incluyen alojamiento en servidores alemanes con la versión de PHP mantenida al día.
11. Poner un cortafuegos delante de PHP, y dejar que se endurezca bajo ataque
Los 574 intentos de explotación y los 1.978 falsos bots de buscadores son para lo que sirve un cortafuegos de aplicaciones web. El cortafuegos de Hive inspecciona cada petición en busca de inyección SQL, cross-site scripting, salto de directorios, inyección de comandos y herramientas de escaneo, y el motor con su conjunto de reglas base OWASP es gratuito en todos los planes. Un drop-in opcional bloquea antes de que cargue WordPress, con la configuración de Apache y nginx generada para ti. La detección de bots verificados confirma a Googlebot y Bingbot por sus rangos de direcciones oficiales y marca o bloquea a los impostores.
Professional añade dos cosas. Los conjuntos de reglas más profundos llegan firmados por Priority Sync según se publican, y el Hardening Mode reacciona a un ataque coordinado: cuando muchas direcciones golpean el inicio de sesión en una ventana corta, el plugin aprieta sus umbrales en todo el sitio durante una hora y después los suelta. La fuerza bruta distribuida de una botnet se detiene a medio vuelo en vez de colarse por debajo del límite por dirección. La guía del cortafuegos y la guía del Hardening Mode cubren ambos en detalle.
12. Copias de seguridad que has restaurado, supervisión y una comprobación de preparación
Una copia de seguridad solo cuenta cuando la has restaurado. Guarda copias diarias fuera del servidor web, consérvalas el tiempo suficiente para llegar antes de una intrusión que notaste tarde, y restaura una en un sitio de staging al menos una vez al trimestre para que el procedimiento se conozca antes de hacer falta.
La supervisión es la otra mitad. La página System Status de Hive lista lo que suele fallar en silencio: un cron parado, una cabecera de proxy de confianza sin rangos, un envío de correo que falla, un administrador sin segundo factor propio. Cada hallazgo lleva una gravedad, la hora en que se vio por primera vez y un enlace al ajuste responsable. En el plan Business, el registro de auditoría anota quién cambió qué ajuste, plugin, archivo o cuenta, con el valor antiguo y el nuevo, que es lo que necesitas la mañana siguiente a un incidente.
Medir el resultado: la puntuación de endurecimiento
Cada paso de esta lista que el plugin puede ver se puntúa en el panel de Hive. La puntuación de endurecimiento pondera trece elementos, desde el segundo factor exigido hasta las huellas ocultas, da una nota de A+ a F y enlaza cada elemento con su ajuste. Una instalación recién hecha con los valores por defecto arranca baja a propósito: la puntuación mide lo que has activado, no lo que el plugin podría hacer.


Los dos botones bajo los medidores abren Mozilla Observatory y securityheaders.com, para que puedas confirmar la parte de cabeceras de la puntuación con una herramienta que no es nuestra. Cómo se construye la puntuación está en la documentación de la puntuación.
Qué pasos necesitan Hive Professional
La mayor parte de esta lista funciona con el plugin gratuito. Professional, 14,90 euros al mes con IVA incluido para tres dominios, añade las piezas que necesitan infraestructura gestionada o un flujo de reglas.
| Elemento de la lista | Free | Professional |
|---|---|---|
| Dieciséis sensores y bloqueo progresivo | Sí | Sí |
| Interruptores de Access Lockdown y Hide Login | Sí | Sí |
| Segundo factor por app, passkey y correo | Sí | Sí |
| Segundo factor por SMS | No | Sí |
| Escalada adaptativa por rol | No | Sí |
| Cabeceras de seguridad básicas | Sí | Sí |
| HSTS, Permissions-Policy, CSP, cabeceras cross-origin | No | Sí |
| Motor del cortafuegos y base OWASP | Sí | Sí |
| Conjuntos de reglas más profundos por Priority Sync | No | Sí |
| Hardening Mode ante ataques coordinados | No | Sí |
| Puntuación de endurecimiento y System Status | Sí | Sí |
¿Listo para empezar? El plugin gratuito cubre de serie los pasos 3 a 9 y 11. Si prefieres dejar toda la lista en manos de alguien, CMS ADMINS la configura y la mantiene en marcha.
Preguntas sobre el endurecimiento de WordPress
¿Basta un plugin de seguridad para endurecer WordPress?
Un plugin de seguridad cubre ocho de los doce pasos de esta lista: el inicio de sesión, el segundo factor, la enumeración, los interruptores de bloqueo, la página de inicio de sesión oculta, las cabeceras, el cortafuegos y la puntuación. Las actualizaciones, los permisos de archivos, HTTPS y las copias de seguridad viven fuera del plugin, en el servidor y en una rutina, y ningún plugin puede asumirlos.
¿Desactivar XML-RPC rompe Jetpack o la app de WordPress?
Sí, ambos usan XML-RPC y dejan de funcionar cuando el endpoint se apaga. El segundo interruptor de Hive mantiene XML-RPC en marcha y quita solo el método multicall que mete cientos de intentos de contraseña en una única petición, que es la parte que usan los atacantes.
¿Cada cuánto debería repasar la lista?
El paso 1 se hace cada semana y el paso 12 cada trimestre. Los otros diez se ajustan una vez y se quedan ajustados; la puntuación de endurecimiento del panel muestra de un vistazo cuándo uno de ellos se ha vuelto a apagar, por ejemplo tras un conflicto de plugins.
¿Sigo necesitando un plugin cortafuegos detrás de Cloudflare?
Cloudflare filtra en el borde y nunca ve un inicio de sesión fallido de WordPress, un comentario o el envío de un formulario, que es donde ocurren la mayoría de los eventos de la tabla de arriba. Las dos capas se complementan, siempre que al plugin se le diga que confíe en la cabecera de Cloudflare para la dirección del visitante.