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
- Abre el archivo
functions.phpde tu tema hijo, o mejor, un plugin de snippets. - Pega el código de abajo al final del archivo.
- Guarda los cambios.
- Verifica visitando
tudominio.com/?author=1: debe dar un 404 en vez de redirigir. - Verifica
tudominio.com/wp-json/wp/v2/users: debe devolver un error de autenticación.
// 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.
