
Índice
Por qué deberías desactivar la REST API WordPress
La llegada de la REST API al núcleo de WordPress (allá por la versión 4.7) cambió cómo desarrollamos. De repente, aplicaciones externas podían hablar con el sitio mediante HTTP. Sucede que esta apertura también dejó una ventana abierta para quien tenga malas intenciones. Si gestionas una web clásica, donde no usas el editor Gutenberg ni apps conectadas, lo más probable es que no necesites estos endpoints expuestos al público. Por eso, decidir desactivar REST API WordPress es una medida de seguridad proactiva. Tiene sentido.
El problema es que la API, por defecto, es pública. Cualquiera con algo de curiosidad puede hacer una petición a /wp-json/wp/v2/users y obtener la lista de nombres de los administradores. Tener esa info es oro puro para un atacante: le permite concentrar la fuerza bruta justo donde duele. Además, endpoints sin autenticación pueden servir para hacer consultas masivas. El resultado. Lentitud o caídas del servicio (DoS). Restringir este acceso reduce mucho la superficie de ataque.
Métodos para restringir el acceso a la API
Tienes tres caminos principales para limitar o eliminar el acceso. Depende de cómo te lleves con el código y de tu servidor. No es solo apagar un interruptor, se trata de filtrar quién ve qué. Vamos a ver los métodos más efectivos.
Método 1: Bloqueo mediante código en functions.php
La forma más directa es usar los filtros que WordPress ofrece. Este método es ideal si quieres que Gutenberg y el panel de admin sigan funcionando (lo necesitan), pero quieres cerrar la puerta a accesos externos sin autenticar.
Añade este fragmento en el archivo functions.php de tu tema hijo. O mejor, en un plugin de funcionalidades específicas. No toques el tema directamente o perderás los cambios en la próxima actualización.
add_filter( 'rest_authentication_errors', function( $result ) {
// Si ya hay un error, devuélvelo.
if ( true === $result || is_wp_error( $result ) ) {
return $result;
}
// Si no hay cookie de autorización y no es una solicitud interna, bloquear.
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_disabled', 'La API REST está desactivada para usuarios no autenticados.', array( 'status' => rest_authorization_required_code() ) );
}
return $result;
});Nota técnica: Este código deja que los usuarios logueados (administradores y editores) sigan usando el escritorio y el editor de bloques, ya que tienen la cookie de sesión. Cualquier bot o usuario anónimo se encontrará con un error 401 o 403 al intentar acceder.
Método 2: Desactivación completa para usuarios no administradores
¿No usas Gutenberg en absoluto? Entonces puedes ser más estricto. El siguiente código deshabilita la API para cualquier usuario que no tenga la capacidad de manage_options (típica de administradores).
add_filter( 'rest_authentication_errors', function( $access ) {
if ( ! current_user_can( 'manage_options' ) ) {
return new WP_Error( 'rest_disabled', 'Acceso a la API REST restringido.', array( 'status' => 403 ) );
}
return $access;
});Cuidado con esto. Si tienes el editor de bloques activo y quitas el acceso a los que crean contenido, el editor no cargará. Verás errores de JavaScript por todos lados. Prueba esto en un entorno de desarrollo antes de ponerlo en producción. Siempre.
Método 3: Restricción a nivel de servidor (Apache o Nginx)
Para una seguridad de verdad y mejor rendimiento, lo ideal es bloquear estas rutas antes de que toquen PHP. Ahorras recursos del servidor. La configuración cambia según tu software web.
Configuración en Apache (.htaccess)
Si tu servidor es Apache, mete estas reglas en el archivo .htaccess de la raíz. Ponlo antes de las reglas estándar de WordPress.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-json/
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_[a-zA-Z0-9_]+=
RewriteRule ^ - [L,F=403]
</IfModule>Estas reglas miran si la petición va a /wp-json/ y si el usuario no tiene la cookie de sesión de WordPress. Si se cumplen ambas, boom. Error 403 inmediato.
Configuración en Nginx
Para los de Nginx (común en VPS), la regla va en el bloque server de tu configuración (suele estar en /etc/nginx/sites-available/tu-sitio.com).
location ~* ^/wp-json/ {
if ($http_cookie !~* "wordpress_logged_in_") {
return 403;
}
}Después de tocar la configuración de Nginx, recarga con el comando service nginx reload o systemctl reload nginx. No se olvides.
Verificando la desactivación de la API
Aplica los cambios. Ahora toca comprobar que funciona de verdad. No te fíes de la intuición. Usa una ventana de incógnito (para no enviar tus cookies) o herramientas como cURL.
Abre la terminal y ejecuta esto, cambiando tu-dominio.com por tu URL:
curl -I https://tu-dominio.com/wp-json/wp/v2/usersMira la cabecera de respuesta. Si hiciste bien los deberes, deberías ver un código 401 Unauthorized o 403 Forbidden. Si ves un 200 OK y un listado de usuarios en JSON, la API sigue expuesta. Revisa las reglas o la caché.
Preguntas frecuentes
¿Desactivar la API afecta al rendimiento?
Al revés. Bloquear solicitudes basura a nivel de servidor (Nginx/Apache) mejora el rendimiento. Ahorras ciclos de PHP y consultas a base de datos para bots que andan buscando agujeros.
¿Mi tema dejará de funcionar?
Depende. Los temas modernos y constructores como Elementor o Divi a veces usan la API para cargar cosas dinámicas (el carrito de WooCommerce, popups). Si ves cosas raras en el front-end tras bloquear la API, quizá necesites excepciones para usuarios con sesión iniciada.
¿Puedo usar un plugin en lugar de código?
Claro, hay plugins de seguridad para eso. Pero añadir un par de líneas a functions.php o una regla en .htaccess es más limpio y eficiente que instalar un plugin entero solo por esto.
Conclusión
La seguridad en WordPress no es instalar un plugin antivirus y olvidarse. Se trata de controlar los flujos de datos. La REST API es potente, pero dejarla expuesta por defecto es un riesgo innecesario para la mayoría de webs corporativas, blogs o portafolios que no son «headless».
Haber decidido desactivar REST API WordPress para usuarios no autenticados es un paso grande para blindar tu sitio. Ya sabes cómo filtrar con PHP y bloquear a nivel de servidor. Encuentra el equilibrio entre seguridad y funcionalidad. Y prueba siempre en un entorno de pruebas para no fastidiar a tus administradores. Si necesitas ayuda con esto, en RedServicio (redservicio.net) tenemos expertos listos.

