Désactiver facilement l’API REST de WordPress

Désactiver facilement l’API REST de WordPress

Publié le 07/05/2022 par Build Your Web

Désactiver l’API REST WordPress, mais pourquoi faire ?

Introduite dans WordPress à la fin de l’année 2016 (lors de la sortie de WordPress 4.6), l’API REST a suscité la controverse chez certains et l’indifférence chez d’autres.

Il est même possible que vous n’ayez aucune idée de ce que c’est, mais si vous avez une version mise à jour de WordPress, vous exposez publiquement de nombreux aspects de votre site Web via l’API REST. Il suffit d’ajoutez simplement cette partie /wp-json/ à la fin de votre nom de domaine et de regarder le résultat :

Désactiver API REST wordpress - Endpoint exemple

Faites le test sur l’URL suivante et vous serez peut-être surpris de ce que vous trouverez :

votredomaine.fr/wp-json/wp/v2/posts

Cette URL montre une liste de toutes les dernières publications de votre site. Si vous avez un contenu protégé accessible pour seulement certains utilisateurs premium de votre site Web, il est possible que ce contenu soit exposé via l’API REST.

Afficher les API WordPress uniquement pour les administrateurs

Pour afficher l’API REST seulement au administrateurs et donc la masquer pour toutes autres personnes, vous pouvez ajouter le code suivant dans votre site WordPress. Ce code doit être placé dans le fichier functions.php de votre thème ou simplement dans un plugin dédié à cela (option plus safe pour la gestion de votre site).

<?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', 'Vous devez être connecté pour accéder à cette ressource.', array( 'status' => 401 ) );
  }
  if ( ! current_user_can( 'administrator' ) ) {
    return new WP_Error( 'rest_not_admin', 'Vous n\'avez pas les droits suffisants pour accéder à cette ressource.', array( 'status' => 401 ) );
  }
  return $result;
});

Une fois que vous aurez placé ce code dans votre WordPress, l’accès à une des API WordPress sur votre site Web sans être connecté et sans être administrateur entraînera un message d’erreur (http 401 + message : « Vous n’avez pas les droits suffisants pour accéder à cette ressource. ») . Votre contenu est maintenant protégé. Si vous souhaitez permettre l’accès aux API pour les utilisateurs connectés, il suffit d’enlever la dernière condition. Ce qui donne :

<?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', 'Vous devez être connecté pour accéder à cette ressource.', array( 'status' => 401 ) );
  }
  return $result;
});

Plugins pour désactiver l’API REST de WordPress

Dans le cas où toucher au fichier functions.php vous fait peur, vous avez la possibilité d’utiliser des plugins pour désactiver l’API REST de WordPress.

Il existe plusieurs plugins qui vous permettent de désactiver l’API REST de WordPress. Je vous recommande d’utiliser Disable REST API de Dave McHale.

Un plugin simple et efficace qui vous permet de désactiver toutes les endpoints ou seulement ceux que vous souhaitez. Vous vous rendrez compte de toutes les API disponibles sur votre site.

Désactiver API REST wordpress - Plugin Disable rest Api

N’hésitez pas à poster vos questions si vous avez des problèmes. Nous vous répondrons avec plaisir ! Si vous avez un projet de site Web ou bien de Marketing, n’hésitez pas à prendre contact ici !