Logo de Kodflux - Plataforma de Herramientas SEO y Auditoría Web

PHP / Intermedio / 4 min

Bloquear la enumeración de usuarios en WordPress

Impide que los bots descubran tus nombres de usuario via ?author=1 y el endpoint REST, paso previo a la fuerza bruta.

Antes de atacar tu login por fuerza bruta, los bots primero averiguan tus nombres de usuario. Lo hacen de dos formas: visitando tudominio.com/?author=1 (que redirige al perfil y revela el slug) y consultando el endpoint REST /wp-json/wp/v2/users. Este snippet cierra ambas puertas para visitantes no autenticados sin romper el panel ni la API para usuarios logueados.

Guía de Implementación Paso a Paso

  1. Abre el archivo functions.php de tu tema hijo, o mejor, un plugin de snippets.
  2. Pega el código de abajo al final del archivo.
  3. Guarda los cambios.
  4. Verifica visitando tudominio.com/?author=1: debe dar un 404 en vez de redirigir.
  5. Verifica tudominio.com/wp-json/wp/v2/users: debe devolver un error de autenticación.
PHP
// 1. Bloquear enumeración por ?author=N en el frontend
add_action( 'template_redirect', function () {
    if ( ! is_admin() && isset( $_GET['author'] ) && ! is_user_logged_in() ) {
        wp_die( 'No autorizado', 'Acceso restringido', array( 'response' => 403 ) );
    }
} );

// 2. Bloquear el endpoint REST de usuarios para no autenticados
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<id>[\d]+)'] );
        }
    }
    return $endpoints;
} );

Esto no sustituye a una contraseña fuerte ni al 2FA, pero elimina el reconocimiento fácil: sin conocer el nombre de usuario, un ataque de fuerza bruta pierde la mitad de la ecuación. Combínalo con el rate limiting de wp-login para una defensa en capas.

Buscar en Kodflux