¿Cómo evito la enumeración de usuarios en WordPress?
Por Eureka Studio · Actualizado
Respuesta corta
WordPress muestra los nombres de usuario en cuatro lugares públicos: el endpoint REST /wp-json/wp/v2/users, las redirecciones de ?author=1, las URL de los archivos de autor y el sitemap de usuarios del núcleo. Para ocultarlos, bloquea la lista REST para los visitantes sin sesión, frena los escaneos ?author=, quita el sitemap de usuarios y haz que los errores de acceso sean idénticos. Un plugin puede hacer las cuatro cosas; compruébalas después.
Pasos
1Paso 1
Mira lo que muestra WordPress hoy
Visita yoursite.com/wp-json/wp/v2/users sin haber iniciado sesión. En una instalación predeterminada obtienes una lista JSON con el nombre de acceso de cada autor en el campo slug.
2Paso 2
Prueba el escaneo de autores
Ahora visita yoursite.com/?author=1. WordPress redirige a /author/tu-nombre-de-usuario/ y deja el nombre en la barra de direcciones. Los bots cuentan 1, 2, 3 para recopilar todos los usuarios.
3Paso 3
Cierra los cuatro lugares
Abre Hushfort → Blindaje de superficie y actívalo. Deja activadas Lista de usuarios de REST, Escaneo de autores ("Bloquear los escaneos ?author=1"), Lista de autores del sitemap e Información de autor en oEmbed, y guarda.
4Paso 4
Vuelve a probar desde una ventana privada
Repite las mismas peticiones sin haber iniciado sesión. La lista de usuarios responde ahora "rest_no_route" con un 404, y ?author=1 ya no redirige a un nombre de usuario.
Por qué importa
Para acceder, un atacante necesita dos cosas: un nombre de usuario y una contraseña. WordPress, tal como viene, le entrega la primera mitad. No es un fallo; cada uno de esos lugares existe por algo (feeds para apps, URL de autor legibles, buscadores). Pero juntos permiten a cualquier bot montar en segundos una lista con todos los nombres de acceso de tu web.
Ocultar los nombres de usuario no convierte en segura una contraseña débil. Lo que hace es quitar la mitad fácil del rompecabezas, de modo que cada intento tiene que acertar a la vez un nombre y una contraseña. Combinado con límites de acceso y autenticación de dos factores, eso convierte adivinar en algo no ya lento, sino imposible.
Los cuatro lugares donde WordPress publica los nombres de usuario:
- API REST:
/wp-json/wp/v2/userslista los autores con su slug, que suele coincidir con su nombre de acceso. - Escaneos de autores:
/?author=1redirige a/author/nombre-de-acceso/. - Archivos de autor: la propia URL del archivo contiene el slug del autor.
- Sitemap del núcleo:
/wp-sitemap-users-1.xmllista las URL de los archivos de autor. Las respuestas oEmbed también pueden incluir información del autor.
Errores habituales
- Arreglar un lugar y darlo por terminado. Cerrar
?author=mientras la lista REST sigue abierta no cambia nada para un bot. Revisa los cuatro. - Nombre visible igual al nombre de acceso. Aunque cierres todas las filtraciones, un tema que muestra "Publicado por admin" delata el nombre. Pon un nombre visible distinto en Usuarios → Perfil.
- Romper las páginas de autor reales. En un blog con varios autores, los archivos de autor son útiles. Bloquea los escaneos numéricos en lugar de los archivos.
- Errores de acceso detallados. "La contraseña que has introducido para el nombre de usuario jane no es correcta" confirma que el nombre existe. Usa un solo mensaje para ambos casos.
Sin plugin
Puedes cubrir casi todo esto con un plugin de uso obligatorio (wp-content/mu-plugins/hide-users.php):
<?php
// 1. REST user list: logged-out visitors get nothing.
add_filter( 'rest_endpoints', function ( $endpoints ) {
if ( ! is_user_logged_in() ) {
unset( $endpoints['/wp/v2/users'], $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
}
return $endpoints;
} );
// 2. ?author=N scans: stop the redirect that reveals the name.
add_action( 'template_redirect', function () {
if ( isset( $_GET['author'] ) && ! is_admin() ) {
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
} );
// 3. Core sitemap: drop the users provider.
add_filter( 'wp_sitemaps_add_provider', function ( $provider, $name ) {
return 'users' === $name ? false : $provider;
}, 10, 2 );
// 4. Same message for wrong username and wrong password.
add_filter( 'login_errors', function () {
return 'The username or password is incorrect.';
} );
Advertencias: pruébalo antes en un sitio de pruebas, porque a veces los temas y plugins leen la lista de usuarios de REST. Esto no cambia el slug del autor en las URL de los archivos; para eso, cambia el nicename de cada autor o usa un plugin de nombres visibles. Y es un archivo más que vigilar cuando migres o reconstruyas la web.
Si algo sale mal
- Una integración ha perdido su lista de autores. Algunas herramientas externas leen
/wp/v2/userssin iniciar sesión. Dales una contraseña de aplicación para que se autentiquen, o vuelve a permitir la lista. - Las páginas de autor dan un 404. Elegiste desactivar por completo los archivos de autor. Cambia a la opción que solo bloquea los escaneos numéricos.
- El plugin de SEO sigue listando autores. Muchos plugins de SEO generan su propio sitemap de autores. Desactiva también los sitemaps de autores en ese plugin.
Con Hushfort
El Escudo de nombres de usuario forma parte de Hushfort Pro. El Análisis de superficie, que muestra lo que aún se filtra, está en Hushfort Security, el plugin de seguridad gratuito para WordPress.
El Escudo de nombres de usuario, que forma parte de la capa de Blindaje de superficie de Hushfort, cierra los cuatro lugares desde una sola pantalla:
- bloquea la lista REST
/wp/v2/userspara los visitantes que no han iniciado sesión, - bloquea los escaneos
?author=Nmanteniendo los archivos/author/nombre/(o desactiva los archivos por completo, si lo prefieres), - quita el sitemap de usuarios del núcleo y los datos del autor de las respuestas oEmbed,
- hace que el mensaje de error de acceso sea el mismo para un nombre de usuario incorrecto y para una contraseña incorrecta.
Después, el Análisis de superficie prueba cada lugar con peticiones reales y nombra cualquier usuario que siga filtrándose.
Preguntas frecuentes
¿Qué es la enumeración de usuarios en WordPress?
¿Es un riesgo de seguridad que se vea mi nombre de usuario?
¿Bloquear la lista de usuarios de REST estropea el editor?
¿Puedo mantener las páginas de archivo de autor?
¿Por qué importan los mensajes de error de acceso?
Guías relacionadas
¿Cómo reviso la seguridad de mi web WordPress y compruebo qué deja al descubierto?
Revisa la seguridad de tu web WordPress como lo haría un bot: cinco peticiones muestran si el acceso, XML-RPC y tus nombres de usuario están expuestos.
Ver los pasos¿Qué es xmlrpc.php y cómo lo desactivo en WordPress?
xmlrpc.php es una segunda puerta de acceso a WordPress que ocultar el login no cierra. Cómo desactivarlo bien, mantener los pingbacks y comprobarlo.
Ver los pasos¿Cómo limito los intentos de login (inicio de sesión) en WordPress?
Frena la fuerza bruta en WordPress bloqueando una IP tras unos pocos intentos de login fallidos: ajustes que funcionan, código manual y huecos a cerrar.
Ver los pasos



