La API REST de WordPress se introdujo en el núcleo de WordPress a finales de 2016 con el lanzamiento de WordPress 4.6. Como todos los grandes cambios que aparecen en la plataforma, la API REST generó controversia en algunos e indiferencia en otros.
Incluso es posible que no tengas idea de qué es, pero si tienes una versión actualizada de WordPress (y deberías) estás exponiendo públicamente muchos aspectos de tu sitio web a través de la API REST. Simplemente agregue el fragmento / wp-json / a su nombre de dominio y visite esta URL para verlo con sus propios ojos.
Además, haga el ejercicio de visitar las siguientes URL web y puede sorprenderse con lo que encontrará:
- mydomain.com/wp-json/wp/v2/users
- mydomain.com/wp-json/wp/v2/posts
Como resultado de la primera URL, tendrá un JSON con los datos de los usuarios de su web. Ten en cuenta que los identificadores de usuario están incluidos allí, y esto es algo que las personas tradicionalmente ocultan debido a problemas de seguridad y para evitar posibles ataques.
La segunda URL nos muestra una lista con las últimas publicaciones. Sin embargo, si ha protegido el contenido al que solo ciertos usuarios premium de su sitio web (en un sitio de membresía, por ejemplo) deberían tener acceso, es posible que haya estado exponiendo este contenido premium a través de la API REST.
Veamos cómo podemos evitar situaciones comprometidas si somos más conscientes de lo que exponemos públicamente a través de la API REST de WordPress.
Table of Contents
Mostrar API REST de WordPress solo a usuarios registrados
Una solución que podemos implementar para ocultar la API REST de WordPress es evitar que los usuarios que no están registrados en nuestro sitio web accedan a ella.
Para ocultar la API REST a usuarios no registrados, debemos agregar el siguiente código en nuestro WordPress. Recuerde que puede ponerlo en el archivo functions.php de su tema o simplemente desarrollar un complemento para él (una opción mucho mejor).
<?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;
});
Una vez que haya puesto este código en su WordPress, acceder a una ruta de la API REST en su sitio web sin estar conectado dará como resultado un mensaje de error. Su contenido ahora está protegido.
Mostrar API REST de WordPress solo a administradores
Ahora imagine que lo que quiere es que solo los usuarios con el rol de Administrador en su WordPress puedan acceder a la API REST. En este caso, el código que debe usar es el siguiente:
<?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 ) );
}
if ( ! current_user_can( 'administrator' ) ) {
return new WP_Error( 'rest_not_admin', 'You are not an administrator.', array( 'status' => 401 ) );
}
return $result;
});
Si puede pensar en una mejor manera de evitar acceder a la API REST de WordPress, o en su caso lo hace de manera diferente, no dude en dejar un comentario a continuación
Complementos para deshabilitar la API REST en WordPress
En caso de que desee realizar cambios más complejos, tiene la posibilidad de usar complementos para deshabilitar la API REST en WordPress.
Hay varios complementos que le permiten deshabilitar la API REST en WordPress, pero el que recomiendo es Deshabilitar API REST de Dave McHale.
El complemento Disable REST API para WordPress le permite tener más control sobre qué rutas están activas y cuáles no.
El complemento Disable REST API para WordPress le permite tener más control sobre
qué rutas están activas y cuáles no.
Por defecto, este complemento ya evita que usuarios no registrados accedan a la API REST de su WordPress. Y además, el complemento Disable REST API le permite seleccionar qué rutas API están activas y cuáles desea deshabilitar en su sitio web.
De esta manera, controlar qué datos e información es pública en su sitio web a través de la API REST de WordPress es tremendamente simple.