API REST de WordPress: por qué bloquear solo las solicitudes sin sesión en lugar de desactivarla por completo

La API REST de WordPress muestra los nombres de usuario del sitio a través de la dirección wp-json, incluso a visitantes que no han iniciado sesión. Desactivarla por completo puede impedir que el editor de bloques guarde, así que aquí se explica cómo bloquear solo las solicitudes sin sesión iniciada y comprobarlo con una respuesta 401.
1️⃣ Qué es la API REST de WordPress: la dirección wp-json y su función
La API REST de WordPress es una función integrada de WordPress que intercambia datos del sitio, como entradas, páginas y usuarios, en formato JSON, y responde bajo /wp-json/ después de la dirección del sitio.
Bajo /wp-json/, las direcciones se dividen por tipo de dato, como [wp/v2/posts], [wp/v2/pages] y [wp/v2/users], y cada una de ellas se llama endpoint. El editor de bloques también envía solicitudes a estas direcciones al guardar una entrada.
https://example.com/wp-json/
https://example.com/wp-json/wp/v2/posts
https://example.com/wp-json/wp/v2/pages
https://example.com/wp-json/wp/v2/users2️⃣ Nombres de usuario expuestos a través de wp-json
El endpoint [wp/v2/users] devuelve el nombre visible y el slug de cada usuario que ha publicado entradas, y por defecto el slug contiene el nombre de usuario de acceso tal cual. En el sitio de prueba, https://testpilotweb.com/, el slug de la cuenta de administrador también coincidía con su nombre de usuario de acceso.
Si el nombre de usuario de acceso queda expuesto, al atacante solo le falta averiguar la contraseña para iniciar sesión, y la página de acceso de WordPress del sitio de prueba registró 2.570 intentos de fuerza bruta solo el 7 de octubre de 2026.
Aunque bloquees esta dirección, el mismo nombre de usuario sigue apareciendo en la dirección de la página de autor (/author/usuario/).
3️⃣ Lo que se rompe si la desactivas por completo
Desactivar por completo la WP REST API rompe primero el guardado en el editor de bloques, y por eso Perfmatters, uno de los plugins de optimización de WordPress, divide el alcance en dos niveles: [Disable for Non-Admins] y [Disable When Logged Out]. En sitios con cuentas de autor o colaborador, [Disable for Non-Admins] también impide que esas cuentas guarden entradas.
Incluso en un sitio que solo bloqueaba las solicitudes sin sesión, al conectar un conector MCP en claude.ai aparecieron 0 herramientas tras completar la autenticación. El registro del servidor mostraba todas las solicitudes MCP como 401, y la causa era que Perfmatters bloqueaba la solicitud antes de que MCP comprobara el token.
| Valor de [Disable REST API] | Dirección users para visitantes sin sesión | Guardado por cuentas no administradoras | Adecuado para |
|---|---|---|---|
| Default (Enabled) | Nombres de usuario expuestos | Se guarda | — |
| Disable for Non-Admins | 401 | Falla el guardado | Sitios sin cuentas de autor o colaborador |
| Disable When Logged Out | 401 | Se guarda | Sitios con cuentas de autor; añade rutas de excepción para conexiones con token como MCP |
4️⃣ Bloquear solo las solicitudes sin sesión (Perfmatters)
En el escritorio de WordPress, ve a [Ajustes] → [Perfmatters] → [General], cambia [Disable REST API] en [Core] a [Disable When Logged Out] y pulsa [Save Changes].


Idiomas compatibles con Perfmatters: inglés (predeterminado), coreano, alemán, francés, italiano, neerlandés, portugués (Brasil), ruso, ucraniano, turco, búlgaro, húngaro, indonesio, persa, chino (simplificado)

Si abres /wp-json/wp/v2/users en una ventana de incógnito sin iniciar sesión, devuelve una respuesta 401 con el mensaje [Sorry, you do not have permission to make REST API requests.], mientras que el editor de bloques sigue guardando entradas con la sesión iniciada.
[
{
"id": 1,
"name": "User A",
"slug": "user_a",
"link": "https://example.com/author/user_a/"
}
]
{
"code": "rest_authentication_error",
"message": "Sorry, you do not have permission to make REST API requests.",
"data": { "status": 401 }
}
5️⃣ Añadir excepciones a las rutas bloqueadas
Si necesitas abrir solo una ruta concreta mientras bloqueas, añade esa ruta al filtro [perfmatters_rest_api_exceptions] de Perfmatters. El problema de 0 herramientas del conector MCP de claude.ai se resolvió creando un fragmento PHP en el menú [Code] de Perfmatters y dejando como excepción solo la ruta MCP.
add_filter('perfmatters_rest_api_exceptions', function($exceptions) {
$exceptions[] = '/mcp/mcp-oauth-server';
return $exceptions;
});Incluso después de añadir la excepción, el propio MCP bloquea las solicitudes sin token con una respuesta 401 y el mensaje [MCP authentication required.], mientras que /wp-json/wp/v2/users sigue devolviendo la respuesta 401 de Perfmatters.
[MCP authentication required.]
[Remove REST API Links], en la misma sección [Core], solo elimina el enlace api.w.org de la cabecera de la página y de las cabeceras de respuesta; la WP REST API en sí sigue respondiendo.
🔢 FAQ & contenido recomendado
MCP
WP Rocket MCP Server
Cómo conectar herramientas de IA para que vacíen la caché y cambien ajustes en lugar del panel de administración.
Seguridad
Wordfence vs iThemes Security
Comparación de dos plugins de seguridad que bloquean ataques de fuerza bruta y malware.
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.