Sign, metal, green paint, de Ben Hershey

La API REST de WordPress se introdujo en el core de WordPress a finales de 2016 con la salida de WordPress 4.6. Como todos los cambios grandes que aparecen en la plataforma, la API REST generó controversia en unos e indiferencia en otros.

Es posible incluso que no tengas ni idea de lo que es, pero si tienes una versión actualizada de WordPress (y deberías) que sepas que estás exponiendo muchos aspectos de tu web públicamente mediante la API REST. Tan solo tienes que añadir el fragmento /wp-json/ a continuación de tu nombre de dominio y visitar esta URL para verlo con tus propios ojos.

Es más, haz el ejercicio de visitar las siguientes direcciones web y quizás te sorprenda lo que te encontrarás:

  • tudominio.com/wp-json/wp/v2/users
  • tudominio.com/wp-json/wp/v2/posts

Como resultado de la primera URL tendrás un JSON con los datos de los usuarios de tu web. Fíjate que se incluye el identificador del usuario, algo que tradicionalmente se intenta ocultar por temas de seguridad y prevenir posibles ataques.

En cuanto a la segunda URL, nos muestra una lista con las últimas entradas. No obstante, si tienes contenido protegido que sólo quieres mostrar a ciertos usuarios premium de tu web (si tienes un membership site, por ejemplo), es posible que a través de la API REST tengas el contenido desprotegido.

Veamos cómo podemos evitar situaciones comprometidas siendo más conscientes de lo que públicamente exponemos a través de la API REST de WordPress.

Mostrar la REST API sólo a usuarios registrados

Una solución que podemos implementar para ocultar la API REST de WordPress es evitar que aquellos usuarios que no estén registrados en nuestra web puedan acceder a esta.

Para ocultar la API REST a usuarios no registrados, debemos añadir el siguiente código en nuestro WordPress. Recuerda que lo puedes meter en el archivo functions.php de tu tema o bien hacerte un plugin (mucho mejor opción).

Una vez hayas metido este código en tu WordPress, si ahora intentas acceder a una ruta de la REST API en tu web y no estás logueado, no verás más que un mensaje de error como respuesta. Tus contenidos estarán protegidos.

Mostrar la REST API sólo a usuarios administradores

Ahora imagínate que lo que quieres es que sólo los usuarios con el rol de Administrador en tu WordPress puedan tener acceso a la REST API. En este caso el código que has de utilizar es el siguiente:

Fíjate en que ahora la comprobación la hacemos utilizando la función current_user_can de WordPress. Si quisieras hacer la comprobación con un rol diferente al de administrador, podrías hacer el cambio correspondiente en esta función y listo.

Y si se te ocurre una manera mejor de evitar el acceso a la API REST de WordPress o bien en tu caso lo haces diferente, no dudes en dejarme un comentario más abajo. Siempre es interesante conocer otros puntos de vista ☺️.

Plugins para desactivar la REST API en WordPress

En caso de que quieras hacer cambios más complejos, tienes la posibilidad de utilizar plugins para desactivar la API REST de WordPress.

Hay varios plugins que te permiten desactivar la API REST en WordPress, pero el que te recomiendo es Disable REST API de Dave McHale.

El plugin Disable REST API para WordPress te permite tener un mayor control sobre qué rutas están activas y cuáles no.
El plugin Disable REST API para WordPress te permite tener un mayor control sobre qué rutas están activas y cuáles no.

Por defecto, este plugin ya evita que los usuarios no registrados puedan acceder a la API REST de tu WordPress. Pero además, el plugin Disable REST API te permite seleccionar qué rutas de la API están activas y cuáles quieres desactivar en tu web.

De este modo, controlar qué datos e información es pública en tu web a través de la API REST de WordPress es tremendamente sencillo.

Imagen destacada de Ben Hershey en Unsplash.

11 respuestas a «Protege tu WordPress ocultando la API REST»

  1. Avatar de José Mª Labarta

    Gracias Antonio.
    Me parece muy buen consejo, he añadido tu código a mi sitio web.

  2. Avatar de Jose
    Jose

    Muchas gracias Antonio, solo soy un usuario de WordPress sin ninguna experiencia, tan solo leo vario blogs de personas que entienden y me hago caso de ello como es tu caso, en principio me ha cundido el pánico y he realizado las pruebas que comentas pero parece ser que el plugin iThemes Security el cual tengo instalado también desactiva el acceso a la API, te mando una captura.

    https://imgur.com/zZF3TfV

    Un saludo y muchas gracias por el esfuerzo.

    1. Avatar de Antonio Villegas

      En efecto, hay otros plugins que ocultan el acceso a la API REST de WordPress. De todos modos, tampoco es para que cunda el pánico si no tienes nada que ocultar en tu web 🙂

  3. Avatar de Alex Millán
    Alex Millán

    He visto que también lo bloquean por la ip, es decir, sólo permitir el uso de la API en localhost, no se que tan viable sería, pero registringiría mucho mas, cuando no usamos la API en absoluto.

    1. Avatar de Antonio Villegas

      Bueno, si no vas a usar la API, directamente la desactivas y listo. De todas formas, que tú no la uses no significa que algún plugin que tengas no la use. Ten cuidado a ver si con una cosa rompes otra.

  4. Avatar de Dorian
    Dorian

    Alguien podría ayudarme con este mensaje de la API REST?

    «La API REST es una forma en que WordPress y otras aplicaciones se comunican con el servidor. Un ejemplo es la pantalla del editor de bloques, que se basa en esto para mostrar y guardar tus publicaciones y páginas.

    La API REST no ha procesado el parámetro de consulta context correctamente.»

    No se como solucionarlo, esto me apareció despues de actualizar la versión de php a la v.74

  5. Avatar de Carla
    Carla

    Hola Antonio, me gustaría saber si has gestionado el bloqueo de la API usando plugins que tiren de ella para funcionar, como WPML. Cómo resuelves estos conflictos? Gracias.

    1. Avatar de Antonio Villegas

      Hoy en día hay tantos plugins que hacen uso de la API Rest que, en caso de usarlos, lo mejor es no ocultarla.

  6. Avatar de VERONICA
    VERONICA

    Hola tengo la misma problemática de Dorian:

    La API REST no ha procesado el parámetro de consulta context correctamente.
    ¿Por favor que significa y como lo arreglo? ¿bastaría con ocultar la API REST?
    GRACIAS

    1. Avatar de Antonio Villegas

      ¿Es posible que ya la tengas deshabilitada y por eso te falla? En tal caso, vuelve a habilitarla o investiga quién es el causante del problema (un plugin, tu tema…).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad de Nelio Software

Tus datos personales se almacenarán en SiteGround y serán usados por Nelio Software con el único objetivo de publicar tu comentario aquí. Con el envío de este comentario, nos das el consentimiento expreso para ello. Escríbenos para acceder, rectificar, limitar o eliminar tus datos personales.