Guía de solución

Cómo evitar la enumeración de usuarios en WordPress

8 de febrero de 2026 Actualizado el 19 abr 2026

La enumeración de usuarios es una técnica de reconocimiento que utilizan los atacantes para descubrir nombres de usuario válidos en tu sitio WordPress. Suele ser el primer paso antes de un ataque de fuerza bruta. Si un atacante conoce tu nombre de usuario de administrador, solo necesita adivinar la contraseña. Si no conoce el nombre de usuario, la superficie de ataque es significativamente mayor. Bloquear la enumeración obliga a los atacantes a adivinar tanto el nombre de usuario como la contraseña, lo que hace que un ataque exitoso sea mucho menos probable.

Cómo enumeran los atacantes los nombres de usuario de WordPress

Hay varios métodos que los atacantes utilizan para descubrir nombres de usuario en un sitio WordPress. Entender cada uno te ayuda a saber contra qué protegerte.

  • URLs de archivo de autor: Por defecto, WordPress crea archivos de autor en /author/nombredeusuario/. Un atacante puede visitar ?author=1, ?author=2, y así sucesivamente. WordPress redirige estas URLs al archivo de autor correspondiente, que contiene el nombre de usuario en texto plano. Los scripts automatizados pueden recorrer los IDs de autor muy rápidamente para construir una lista completa de nombres de usuario.
  • Endpoint de usuarios de la REST API: La REST API de WordPress expone un endpoint /wp-json/wp/v2/users que devuelve un array JSON con todos los usuarios que han publicado entradas. Esto incluye nombres de usuario, nombres mostrados e IDs de usuario. Por defecto no se requiere autenticación para acceder a este endpoint.
  • Mensajes de error de inicio de sesión: Cuando introduces un nombre de usuario inválido en la página de inicio de sesión de WordPress, el mensaje de error dice algo como "El nombre de usuario X no está registrado." Cuando introduces un nombre de usuario válido pero una contraseña incorrecta, dice "La contraseña que has introducido para el nombre de usuario X no es correcta." Esta diferencia le indica al atacante si un nombre de usuario existe.
  • Respuestas oEmbed: Los enlaces de descubrimiento oEmbed de WordPress en el código fuente de la página pueden revelar información del autor cuando otros sitios intentan incrustar tu contenido.
  • XML-RPC: El endpoint xmlrpc.php puede usarse para probar combinaciones de nombre de usuario/contraseña a través del método wp.getUsersBlogs. Aunque es más bien un vector de fuerza bruta, confirma nombres de usuario válidos a través de respuestas de error diferentes.

Por qué la enumeración de usuarios importa para la seguridad

Por sí solo, conocer un nombre de usuario no compromete tu sitio. Pero hace que todo lo demás sea más fácil para un atacante. Considera un ataque de fuerza bruta: si el atacante tiene que adivinar tanto el nombre de usuario como la contraseña, el número de combinaciones posibles es enorme. Si ya sabe que el nombre de usuario es "admin" o "john", solo necesita centrarse en la contraseña. Combinado con listas comunes de contraseñas, esto puede llevar a una intrusión exitosa en minutos en lugar de años.

Además, los nombres de usuario descubiertos pueden usarse en ataques de phishing dirigidos. Si un atacante sabe que tu cuenta de administrador es "sarah.johnson", puede crear correos de ingeniería social más convincentes.

Bloquear la enumeración por archivo de autor

Añade este código al archivo functions.php de tu tema o a un plugin personalizado. Intercepta las peticiones con el parámetro ?author=N y las redirige a la página de inicio en lugar de revelar el nombre de usuario:

/**
 * Bloquear la enumeración de usuarios mediante el parámetro author
 */
function block_author_enumeration() {
    if (is_admin()) return;

    if (isset($_REQUEST['author']) && is_numeric($_REQUEST['author'])) {
        wp_redirect(home_url(), 301);
        exit;
    }
}
add_action('init', 'block_author_enumeration');

Esto gestiona el método de enumeración más común. La comprobación is_admin() garantiza que la funcionalidad del backend no se vea afectada. La redirección utiliza un código de estado 301, que indica a los motores de búsqueda que actualicen su índice (en caso de que las URLs de archivo de autor estuvieran indexadas previamente).

Desactivar el endpoint de usuarios de la REST API

El siguiente código elimina el endpoint de usuarios de la REST API para visitantes que no han iniciado sesión. Los usuarios autenticados (como administradores y editores) pueden seguir accediendo, lo que preserva la funcionalidad del editor de bloques y otras herramientas de administración:

/**
 * Eliminar el endpoint de usuarios de la REST API para peticiones no autenticadas
 */
add_filter('rest_endpoints', function($endpoints) {
    if (!is_user_logged_in()) {
        if (isset($endpoints['/wp/v2/users'])) {
            unset($endpoints['/wp/v2/users']);
        }
        if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
            unset($endpoints['/wp/v2/users/(?P[\d]+)']);
        }
    }
    return $endpoints;
});

Tras añadir este código, las peticiones no autenticadas a /wp-json/wp/v2/users devolverán un error 404 en lugar de listar tus usuarios.

Unificar los mensajes de error de inicio de sesión

WordPress muestra mensajes de error diferentes para los escenarios de "nombre de usuario inválido" y "contraseña incorrecta". Esto revela si un determinado nombre de usuario existe en el sitio. La solución es sencilla: devuelve el mismo mensaje genérico para todos los fallos de inicio de sesión:

/**
 * Usar un mensaje genérico de error de inicio de sesión
 */
add_filter('login_errors', function() {
    return 'Nombre de usuario o contraseña no válidos.';
});

Con este cambio, un atacante no puede determinar si un intento de inicio de sesión falló por un nombre de usuario incorrecto o por una contraseña incorrecta. Ambos casos producen la misma respuesta.

Eliminar los enlaces de descubrimiento oEmbed

WordPress incluye enlaces de descubrimiento oEmbed en el head HTML de tus páginas. Estos enlaces pueden exponer información del autor cuando otros sitios intentan incrustar tu contenido. Elimínalos con una sola línea:

remove_action('wp_head', 'wp_oembed_add_discovery_links');

Esto no afecta a tu capacidad de incrustar contenido de otros sitios. Solo evita que otros sitios autodescubran contenido incrustable en el tuyo.

Bloquear la enumeración de autor mediante .htaccess

Si usas Apache, puedes añadir una redirección a nivel de servidor que bloquee la enumeración de autor antes incluso de que WordPress se cargue. Esto es más eficiente que una solución basada en PHP porque no requiere procesamiento PHP:

# Bloquear la enumeración de usuarios mediante el parámetro author
RewriteCond %{QUERY_STRING} ^author=\d+ [NC]
RewriteRule .* /? [R=301,L]

Coloca esto en tu archivo .htaccess antes de las reglas de reescritura de WordPress. Captura cualquier petición con un parámetro de consulta author= que contenga un número y la redirige a la página de inicio.

Soluciones basadas en plugins

Si prefieres no añadir código manualmente, varios plugins de seguridad gestionan la prevención de la enumeración de usuarios:

  • Stop User Enumeration: Un plugin enfocado y ligero que bloquea específicamente los escaneos de autor y el listado de usuarios de la REST API. Hace una cosa y la hace bien.
  • iThemes Security (Solid Security): Una suite de seguridad completa que incluye protección contra enumeración de usuarios junto con funciones como autenticación de dos factores, detección de cambios de archivos y protección contra fuerza bruta. El bloqueo de enumeración se encuentra en la sección "WordPress Tweaks".
  • Wordfence: Principalmente un firewall y escáner de malware, pero sus reglas de firewall pueden bloquear intentos de enumeración. La versión gratuita incluye protección básica; la versión premium añade reglas de firewall en tiempo real.
  • All In One WP Security: Un plugin gratuito y amigable para principiantes con una opción de prevención de enumeración de usuarios en User Accounts > WP Username. También ofrece firewall y funciones de bloqueo de inicio de sesión.

Probar la enumeración en tu propio sitio

Antes y después de implementar estas protecciones, deberías comprobar si la enumeración sigue funcionando. Así es cómo:

  • Prueba de archivo de autor: Abre una ventana privada del navegador y visita https://tusitio.com/?author=1. Si la protección funciona, deberías ser redirigido a la página de inicio en lugar de ver una página de archivo de autor con el nombre de usuario en la URL.
  • Prueba de la REST API: Abre https://tusitio.com/wp-json/wp/v2/users en tu navegador sin haber iniciado sesión. Deberías ver un error 404 o una respuesta vacía, no una lista de usuarios con sus nombres.
  • Prueba de la página de inicio de sesión: Intenta iniciar sesión con un nombre de usuario que no exista, y luego con un nombre de usuario real pero una contraseña incorrecta. Ambos deberían producir el mismo mensaje de error.
  • Análisis de InspectWP: Ejecuta un nuevo análisis de InspectWP en tu sitio. La sección de seguridad comprueba vulnerabilidades de enumeración de usuarios e indicará si tus protecciones funcionan correctamente.

Consejos adicionales de fortalecimiento

La prevención de enumeración de usuarios funciona mejor como parte de una estrategia de seguridad más amplia. Considera estas medidas complementarias:

  • Evita "admin" como nombre de usuario: Si tu cuenta de administrador todavía se llama "admin", crea una nueva cuenta de administrador con un nombre de usuario único, asígnale todo el contenido y luego elimina la antigua cuenta "admin".
  • Usa contraseñas fuertes y únicas: Incluso si un atacante descubre un nombre de usuario, una contraseña fuerte hace que los ataques de fuerza bruta sean impracticables. Usa un gestor de contraseñas para generar y almacenar contraseñas complejas.
  • Activa la autenticación de dos factores: La 2FA añade una segunda capa de protección. Incluso si tanto el nombre de usuario como la contraseña están comprometidos, el atacante no puede iniciar sesión sin el segundo factor.
  • Limita los intentos de inicio de sesión: Plugins como Limit Login Attempts Reloaded o Loginizer pueden bloquear direcciones IP tras un número determinado de intentos fallidos.

Analiza tu sitio de WordPress ahora

InspectWP analiza tu sitio de WordPress en busca de problemas de seguridad, SEO, cumplimiento del RGPD y rendimiento, gratis.

Analiza tu sitio gratis