Hushfort

¿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

  1. 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.

    La lista pública de usuarios REST en yoursite.com/wp-json/wp/v2/users mostrando el slug demo-admin
  2. 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.

    yoursite.com/?author=1 redirigido a yoursite.com/author/demo-admin/, una página de autor titulada Autor: demo-admin
  3. 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.

    Ajustes de Blindaje de superficie: lista de usuarios de REST bloqueada para visitantes sin sesión, escaneos de autores bloqueados, y lista de autores del sitemap e información del autor en oEmbed eliminadas
  4. 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.

    La misma dirección de la lista de usuarios de REST respondiendo ahora rest_no_route con estado 404

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:

  1. API REST: /wp-json/wp/v2/users lista los autores con su slug, que suele coincidir con su nombre de acceso.
  2. Escaneos de autores: /?author=1 redirige a /author/nombre-de-acceso/.
  3. Archivos de autor: la propia URL del archivo contiene el slug del autor.
  4. Sitemap del núcleo: /wp-sitemap-users-1.xml lista 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/users sin 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/users para los visitantes que no han iniciado sesión,
  • bloquea los escaneos ?author=N manteniendo 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 recopilar los nombres de acceso de una web a partir de URL públicas, como ?author=1 o la lista de usuarios de REST. Con los nombres conocidos, a los atacantes solo les queda adivinar las contraseñas.

¿Es un riesgo de seguridad que se vea mi nombre de usuario?

Por sí solo, no, pero les ahorra la mitad del trabajo. Ocultar los nombres es un pequeño paso de blindaje; el trabajo duro lo hacen las contraseñas seguras, los límites de acceso y la autenticación de dos factores.

¿Bloquear la lista de usuarios de REST estropea el editor?

No. Los usuarios con sesión iniciada quedan exentos, así que el editor de bloques y las pantallas de administración funcionan con normalidad. Solo importa si una integración externa lee tu lista de usuarios sin iniciar sesión.

¿Puedo mantener las páginas de archivo de autor?

Sí. Puedes bloquear los escaneos numéricos ?author= y que los archivos /author/nombre/ sigan funcionando. Para ocultar los nombres por completo, da a los autores un nombre visible y un slug de autor distintos de su nombre de acceso.

¿Por qué importan los mensajes de error de acceso?

Por defecto, WordPress dice si lo que falló fue el nombre de usuario o la contraseña. Eso confirma qué nombres de usuario existen. Un mensaje idéntico para ambos casos elimina esa pista.

Informar de un error o pedir una función

Tu mensaje llega directamente al equipo que desarrolla Hushfort.

¿De qué se trata?

Solo lo usamos para responderte.

Usamos estos datos solo para responderte. Privacidad