Cómo deshabilitar el API REST de WordPress

El API Rest de WordPress es una herramienta que utilizan los programadores para interactuar remotamente con WordPress.

El uso principal del API es comunicarse remotamente con WordPress utilizando un lenguaje de programación como Java, Python,… Internamente, la utilizan los plugins no muchos para comunicarse con WordPress. También la usan herramientas para gestionar remotamente WordPress como wp-cli.

En este artículo te voy a enseñar los peligros de tener mal configurada el API de WordPress y cómo protegerte para tener un WordPress más seguro.

¿Por qúe deshabilitar el API REST de WordPress?

EL API es útil para programadores o herramientas concretas para gestionar WordPress, ya que hace sencillo obtener información haciendo peticiones web en un formato (JSON) que entienden mejor los programas.

Probar el funcionamiento del API es sencillo. Puedes usar tu navegador para ver toda la información que muestra. En la barra de direcciones añade /wp-json al nombre de tu dominio. Como hago en este ejemplo:

Como ves, el API muestra mucha información. El problema es que cualquiera puede usarla para obtener fácilmente información de tu sitio.

Por ejemplo, puedes obtener un listado de los usuarios de tu sitio añadiendo /wp-json/wp/v2/users al nombre de tu dominio.

O incluso alguien malintencionado pueden aprovechar el API para lanzar un ataque de denegación de servicio haciendo muchas llamadas sobre este.

Si no utilizas el API REST de modo alguno te recomiendo desactivarlo para ganar en seguridad.

Opción 1. Cómo deshabilitar el API de WordPress [Fácil]

Para deshabilitar el API te recomiendo usar el plugin Disable Rest API. Así que lo primero que harás es instalarlo. Si es el primer plugin que instalas sigue este vídeo tutorial dónde te explico cómo instalar un plugin de WordPress.

El funcionamiento del plugin es bastante sencillo, no necesitas hacer ninguna configuración, al instalarlo y activarlo las peticiones al API serán rechazadas excepto las tuyas propias o de usuarios que están logueados en WordPress.

Además, es compatible con cualquier versión de WordPress.

Sólo te falta comprobar que funciona. Cierra la sesión de WordPress y navega a la dirección del API que te enseñe antes:

Ahora, verás que las peticiones no autorizadas son bloqueadas con un mensaje que indica que no estás autorizado.

NOTA Ten en cuenta que algunos plugin necesitan el API de WordPress para funcionar correctamente, como el Contact Form. Tras bloquear el API comprueba que todo funciona como antes.

Opción 2. Cómo deshabilitar el API con código [Avanzado]

Si eres maquetador o programas temas de WordPress puedes desactivar el API por código. Es un requisito imprescindible que tu sitio ya este usando un tema hijo. Y sólo basta que añadas este código al fichero functions.php:

add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
        return $result;
    }
    if ( ! is_user_logged_in() ) {
        return new WP_Error( 
        	'rest_not_logged_in', 
        	'You are not currently logged in.', 
        	array( 'status' => 401 ) 
        );
    }
    return $result;
});

Es un filtro que sólo admite peticiones autenticadas al API bloqueando cualquier petición anónima.

Tras guardar los cambios en el fichero functions.php, cualquier petición anónima es bloqueada. Y por el contrario, lo plugin pueden seguir haciendo peticiones ya que están autenticadas.


¿Te ha gustado? Mándame ánimos con un comentario. ¡Gracias!

Mabel.


Creative Commons License

Esta obra está bajo una licencia de Creative
Commons Reconocimiento-NoComercial-CompartirIgual
4.0 Internacional
.