blog webempresa

¿Cómo desactivar Rest API en WordPress?

por | Jun 17, 2023 | Aprender WordPress

¿Cómo solucionar el error de “Cómo desactivar Rest API en WordPress

Desde las versiones más recientes de WordPress tenemos disponibles el uso de Rest API, pero es realmente necesario mantener estos protocolos y reglas activas si en realidad no están siendo utilizados en lo absoluto.

A continuación vamos a revisar como desactivar Rest API en WordPress y como habilitarlo solo para los administradores del sitio.

 ¿Qué es Rest API en WordPress?


rest-api-wp-01

En WordPress, una Rest API (Application Programming Interface) se refiere a un conjunto de reglas y protocolos que permiten que diferentes aplicaciones o sistemas se comuniquen entre sí y compartan datos de manera estructurada.

La Rest API de WordPress permite que aplicaciones externas, como aplicaciones móviles o sitios web externos, se conecten y accedan a los datos y funcionalidades de un sitio WordPress. Proporciona un conjunto de puntos finales (endpoints) a través de los cuales se pueden realizar solicitudes HTTP, como obtener, crear, actualizar o eliminar datos en WordPress.

Con la Rest API de WordPress, es posible realizar operaciones como obtener una lista de publicaciones, crear una nueva publicación, obtener detalles de un usuario, actualizar una página, etc. Todo esto se puede hacer utilizando solicitudes HTTP y el intercambio de datos en formato JSON (JavaScript Object Notation).

La Rest API de WordPress es muy útil cuando se desea integrar WordPress con otras aplicaciones o servicios, ya que proporciona una forma estándar de comunicación y acceso a los datos. Esto permite crear aplicaciones personalizadas, acceder a datos de WordPress desde diferentes plataformas y aprovechar las funcionalidades del CMS en otros contextos.

 ¿Como saber si tenemos activa Rest API en WordPress?


Existe una forma bastante simple de verificar si la Rest API está activa en nuestro sitio de WordPress, siguiendo los siguientes pasos:

Desde el navegador web de preferencia visita la URL del sitio de WordPress.

Luego de la URL principal, añade “/wp-json/” al final de la dirección. Por ejemplo: https://www.tusitio.com/wp-json/

Al cargar la URL, si la Rest API está habilitada, podremos apreciar una respuesta en formato JSON que contiene información sobre los endpoints disponibles y los recursos que puedes acceder a través de la API.

Si podemos visualizar una respuesta JSON con información detallada, esto indica que la Rest API está activa y funcionando correctamente en el sitio de WordPress. Por otro lado, si la URL nos arroja un error 404 o una página en blanco, es posible que la Rest API esté desactivada o no se encuentre disponible.

rest-api-wp-01

Es importante tener en cuenta que la Rest API se ha vuelto parte integral de WordPress desde la versión 4.7, por lo que, a menos que se haya modificado o desactivado de manera explícita, debería estar activa de forma predeterminada en las instalaciones más recientes de WordPress. La Rest API proporciona un medio poderoso para interactuar con tu sitio, permitiendo que otras aplicaciones o servicios accedan y manipulen datos de WordPress de manera estructurada.

 Habilitar Rest API solo para administradores de WordPress


Si deseamos habilitar la Rest API de WordPress solo para administradores, podemos emplear un fragmento de código, el cual debe ser incluido en el archivo functions.php que pertenece al tema que tengamos activo en nuestro sitio web (se recomienda que tengamos activo un tema hijo en WordPress).

Una alternativa es usar un plugin que gestione todos los códigos personalizados sin la necesidad de editar ni modificar los archivos base de WordPress, uno de los más utilizados es Code Snippets

rest-api-wp-02

(Visita el plugin haciendo clic en la imagen ↑)

Vamos a agregar el siguiente fragmento de codigo:

// Restringe el acceso a la Rest API solo para administradores
function restrict_rest_api_to_admins() {
  // Verifica si el usuario no es administrador
  if ( ! current_user_can( 'administrator' ) ) {
    // Deshabilita el acceso a la Rest API
    add_filter( 'rest_authentication_errors', function( $result ) {
      // Devuelve un mensaje de error de autenticación
      return new WP_Error( 'rest_api_admin_only', 'Acceso denegado. Solo los administradores pueden acceder a la Rest API.', array( 'status' => rest_authorization_required_code() ) );
    });
  }
}
add_action( 'rest_api_init', 'restrict_rest_api_to_admins' );

rest-api-wp-03

Este código mostrado restringe el acceso a la Rest API de WordPress únicamente a los administradores del sitio. A continuación, vamos a detallarlo y asi entender como funciona:

Se define una función llamada restrict_rest_api_to_admins(), que se ejecutará cuando se inicialice la Rest API (rest_api_init).

Dentro de esta función, se verifica si el usuario actual no tiene el rol de administrador. Esto se realiza utilizando la función current_user_can(‘administrator’), que comprueba si el usuario actual tiene la capacidad de administrador.

Si el usuario no es administrador, se agrega un filtro mediante la función add_filter() al hook rest_authentication_errors. Este filtro se usa para manejar los errores de autenticación en la Rest API.

Dentro de la función anónima pasada como argumento a add_filter(), se crea un nuevo objeto WP_Error. Este objeto representa un error personalizado en WordPress y se utiliza para devolver un mensaje de error de autenticación.

El mensaje de error incluye un código de error personalizado (rest_api_admin_only) y un mensaje descriptivo (Acceso denegado. Solo los administradores pueden acceder a la Rest API.).

Además, se especifica el código de estado de autenticación requerida usando rest_authorization_required_code(). Esto garantiza que se devuelva el código de estado HTTP correcto para indicar que se requiere autenticación.

En resumen, si un usuario que no es administrador intenta acceder a la Rest API, se devuelve un mensaje de error de autenticación y se niega el acceso.

rest-api-wp-04

Por último, se utiliza add_action() para vincular la función restrict_rest_api_to_admins() al hook rest_api_init, asegurando que se ejecute cuando se inicie la Rest API.

Como podemos apreciar, este código es una forma efectiva de restringir el acceso a la Rest API de WordPress solo a los usuarios con el rol de administrador, proporcionando un mayor nivel de seguridad y control sobre las operaciones permitidas a través de la API.

 ¿Cómo desactivar Rest API en WordPress?


Podemos desactivar Rest API en WordPress de varias maneras pero en este caso vamos a ver los dos métodos más efectivos.

 Por medio de plugin


rest-api-wp-05

(Visita el plugin haciendo clic en la imagen ↑)

Disable WP REST API es un plugin que ofrece una funcionalidad simple, pero efectiva al desactivar la API REST de WordPress para los visitantes que no han iniciado sesión en el sitio. Lo mejor de todo es que no requiere ninguna configuración adicional.

Con solo 22 líneas de código, lo que equivale a menos de 2 KB, este complemento es extremadamente liviano y rápido, asegurando un rendimiento óptimo.

Algunas de las características destacadas de este plugin incluyen:

Deshabilitar REST/JSON para visitantes no registrados: El plugin evita que los usuarios que no han iniciado sesión accedan a la API REST/JSON de WordPress, garantizando la protección de tus datos.

Deshabilitar de encabezados REST en la respuesta HTTP: Para todos los usuarios, este plugin elimina los encabezados relacionados con la API REST en las respuestas HTTP, ocultando aún más la existencia de la API.

Deshabilitar los enlaces REST en el encabezado HTML: También se encarga de eliminar los enlaces de la API REST en el encabezado HTML de tu sitio, evitando que los visitantes accedan accidentalmente a la API.

Configuración plug-and-play: Una vez que instales y actives el plugin, comenzará a funcionar de inmediato sin necesidad de configuraciones adicionales. Puedes olvidarte de él y centrarte en otras tareas de tu sitio.

Este plugin es especialmente útil para evitar posibles abusos o accesos no autorizados a la API REST/JSON de tu sitio, proporcionando una solución rápida y sencilla.

El funcionamiento del plugin varía según la versión de WordPress que estés utilizando:

En WordPress 4.7 y versiones posteriores, el plugin desactiva completamente la API REST de WordPress para los visitantes no autenticados, pero permite que los usuarios registrados utilicen la API sin restricciones. Los visitantes no autenticados recibirán un mensaje simple que indica que el acceso está restringido a usuarios autenticados.

En versiones anteriores de WordPress, el plugin deshabilita por completo la funcionalidad de la API REST para todos los usuarios, sin distinción entre usuarios autenticados o no.

 Por medio de código


Si queremos desactivar Rest API en WordPress por completo, podemos incluir el siguiente snippet de WordPress en el archivo functions.php del tema activo o en un plugin antes utilizado:

add_filter('rest_authentication_errors', 'disable_rest_api', 99);
 
function disable_rest_api($access) {
    return new WP_Error('rest_disabled', __('La REST API está desactivada en este sitio.'), array('status' => 403));
}

rest-api-wp-06

Vamos a explicar la estructura del código para comprenderlo mejor.

La línea add_filter(‘rest_authentication_errors’, ‘disable_rest_api’, 99); añade un filtro a la acción de “rest_authentication_errors”. Esto significa que cuando se produzca un error de autenticación en la Rest API, se ejecutará la función llamada “disable_rest_api” con una prioridad de 99.

La función “disable_rest_api” recibe un parámetro llamado “$access”, que representa el error de autenticación actual. Dentro de la función, se crea un nuevo objeto de error utilizando la clase “WP_Error”. Este objeto contiene un código de error llamado “rest_disabled”, un mensaje de error que dice “La REST API está desactivada en este sitio.”, y un código de estado HTTP de 403, que significa “acceso prohibido”.

Al estar activo el código, cuando alguien intenta acceder a la Rest API en WordPress, este código intercepta el error de autenticación y devuelve un mensaje de error indicando que la Rest API está desactivada en el sitio. Esto evita que los usuarios accedan a los endpoints de la API y realiza una respuesta con un código de estado 403 para indicar que el acceso está prohibido.

Debemos recordar que al desactivar Rest API en WordPress, algunas funciones y características de WordPress y de los complementos que dependen de ella podrían dejar de funcionar correctamente. Hay que asegurarnos de comprender las implicaciones antes de desactivarla por completo.

 Conclusión


El desactivar Rest API en WordPress es de gran relevancia por varias razones. En primer lugar, mejora la seguridad al reducir la exposición a posibles ataques de fuerza bruta y proteger datos confidenciales.

Además, al desactivar Rest API en WordPress, se tiene un mayor control sobre la información expuesta y se evita la carga innecesaria en el servidor. Sin embargo, es importante considerar el impacto en la funcionalidad del sitio y evaluar cuidadosamente antes de desactivarla para estar seguros de que no se afecte negativamente la experiencia del usuario o el rendimiento de nuestro sitio web.

También te puede interesar:

¿Te ha resultado útil este artículo?

Promo Junio Webempresa