Protege tu WordPress ocultando la API REST

Publicada en WordPress.

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.

FlojaNo está malBienMuy bien¡Impecable! (1 votos, promedio: 5,00 de 5)
Cargando…

4 comentarios en «Protege tu WordPress ocultando la API REST»

  1. 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. 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 🙂

Deja un comentario

No publicaremos tu correo electrónico. Los campos obligatorios están marcados con: •

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

Al marcar la casilla de aceptación estás dando tu legítimo consentimiento para que tu información personal se almacene en SiteGround y sea usada por Nelio Software con el propósito único de publicar aquí este comentario. Contáctanos para corregir, limitar, eliminar o acceder a tu información.