Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Cómo deshabilitar el API REST de WordPress

20 diciembre, 2021
seguridad wp

El API Rest de WordPress es una interface que nos vale a los desarrolladores para enviar y recibir datos sin tener que hacerlo manualmente y sin tener que inventar una aplicación para comunicarnos con la web, todo esto ya está desarrollado por wp.

Cómo acabo de comentar el uso principal del API es comunicarse con WordPress utilizando un lenguaje de programación como puede ser PHP, Python, o el que te venga mejor siempre que puedas enviar una petición contra la web.

Además hay algunos plugin que también lo utilizan internamente para comunicarse con WordPress. Y por supuesto también la usan para gestionar remotamente WordPress con wp-cli.

Por otro lado, te puedes imaginar que todo esto ayuda a hackers y programadores con no tan buenas intenciones a conectarse con tu web desde cualquier otra máquina remota.

Deshabilitar el API REST de WordPress

Cualquier API es muy útil para desarrolladores y programadores,  ya que va a hacer mas sencillo obtener y enviar información haciendo peticiones web y viendo el resultado en formato json.

wordpress API

Para probar el funcionamiento del API es muy fácil. Puedes usarlo contra cualquier web desde tu navegador y ver toda la información que muestra. En la barra de direcciones añade /wp-json al nombre del dominio, y te mostrará la información de esa página.

El API muestra mucha información, pero como he comentado antes 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.

Si no utilizas para nada el API REST te recomiendo desactivarlo para ganar seguridad.

Cómo deshabilitar el API con código

Si eres maquetador o desarrollas temas de WordPress puedes desactivar el API por código. Solo tienes que añadir está función en el functions.php de tu theme o tu child theme.

add_filter( 'rest_authentication_errors', function( $result ) {
   return new WP_Error( 
          'rest_not_logged_in', 
          'Bye bye.', 
          array( 'status' => 401 ) 
        );   
});

Con este filtro ya no admites peticiones al API bloqueando cualquier petición.

Graba los cambios en el fichero functions.php y listo, todas las peticiones bloquedas.

Saludos!