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 ?

l’API REST a été introduite dans WordPress à la fin de l’année 2016 (lors de la sortie de WordPress 4.6). Elle 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. 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

Vous pouvez faire le test sur l’URL suivante. Le résultat de cet appel risque de vous surprendre :

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;
});

Il vous suffit de placer ce code dans votre ficher function.php dans WordPress. La liste des API WordPress de votre site Web n’est plus disponible. Car si l’utilisateur n’a pas le rôle administrateur, il verra le message d’erreur suivant : http 401 + message : « Vous n’avez pas les droits suffisants pour accéder à cette ressource. ». Vous venez de protéger votre contenu. Si vous souhaitez permettre l’accès aux API pour les utilisateurs connectés, il vous 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

D’ailleurs, si vous avez peur de toucher au fichier functions.php, vous pouvez tout simplement utiliser un plugin pour désactiver l’API REST de WordPress. Comme ça vous ne risquer pas de casser votre site Web.

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 permettra 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 ! D’autres part, si vous avez un projet de site Web ou bien de Marketing, il vous suffit de nous contacter ici !