Sécurité Publié par le

Désactiver l’accès public par défaut de l’API REST dans WordPress 4.7

Désactiver l’accès public par défaut de l’API REST dans WordPress 4.7

La grande nouveauté de WordPress 4.7, c’est la mise en production d’un outil que les développeurs attendaient depuis longtemps : l’API REST.

Une API REST dans WordPress ? Pour quoi faire ?

Petit rappel pour les plus novices d’entre vous. Le principe d’une API est de permettre à des applications ou services tiers de communiquer facilement avec un site Internet.

En d’autres termes, une API (Applications Programming Interface) permet à des développeurs, de concevoir des scripts qui peuvent s’authentifier sur WordPress pour y créer, modifier, supprimer ou récupérer des contenus dans le but d’automatiser des actions.

Jusqu’à présent, avant WordPress 4.7, nous avions déjà la possibilité d’interagir avec un blog sous WP. Cet accès distant se faisait via un Webservice nommé XML-RPC et était activé par défaut depuis WordPress 3.5 (je vous conseille d’ailleurs de le désactiver) !

WP attack API REST

Cette nouvelle API de type REST apporte de nouvelles possibilités pour mieux répondre aux besoins du web moderne…

Cependant, cette nouvelle API possède un réglage par défaut qui donne l’accès anonyme à la liste des utilisateurs de votre site. Un problème de sécurité majeur qui necessite d’être corrigé !

Veuillez noté que ce problème a été corrigé depuis la version 4.7.2

Faites le test en vous rendant à cette adresse pour visualiser ce à quoi n’importe qui peut avoir accès sur votre site grâce à l’API REST de WordPress 4.7 :

VOTRE-NOM-DE-DOMAINE.COM/wp-json/wp/v2/users

Comment désactiver l’accès public de l’API REST de WordPress 4.7 ?

Si vous souhaitez vous protéger de ces réglages par défaut, il y a plusieurs possibilités :

En installant un simple plugin…

Disable REST API
Ce plugin ne désactivera pas totalement votre API REST mais restreindra de façon sélective l’accès aux données de votre site aux seuls utilisateurs connectés.

Vous pouvez également réaliser cette action en déposant le code suivant dans votre fichier functions.php pour ne donner l’accès à l’API REST DE WP qu’aux personnes authentifiées:

function secure_REST_API( $access ) {

if( ! is_user_logged_in() ) {
return new WP_Error( ‘rest_cannot_access’, __( ‘Accès réservé aux personnes authentifiées’, ‘disable-json-api’ ), array( ‘status’ => rest_authorization_required_code() ) );
}

return $access;
}
add_filter( ‘rest_authentication_errors’, ‘secure_REST_API’ );

ou en ajoutant ces quelques lignes à votre fichier functions.php pour le désactiver totalement :

remove_action( ‘init’, ‘rest_api_init’ );
remove_action( ‘parse_request’, ‘rest_api_loaded’ );

remove_action( ‘xmlrpc_rsd_apis’, ‘rest_output_rsd’ );
remove_action( ‘wp_head’, ‘rest_output_link_wp_head’, 10 );
remove_action( ‘template_redirect’, ‘rest_output_link_header’, 11 );
remove_action( ‘auth_cookie_malformed’, ‘rest_cookie_collect_status’ );
remove_action( ‘auth_cookie_expired’, ‘rest_cookie_collect_status’ );
remove_action( ‘auth_cookie_bad_username’, ‘rest_cookie_collect_status’ );
remove_action( ‘auth_cookie_bad_hash’, ‘rest_cookie_collect_status’ );
remove_action( ‘auth_cookie_valid’, ‘rest_cookie_collect_status’ );

add_filter( ‘rest_enabled’, ‘__return_false’ );
add_filter( ‘rest_jsonp_enabled’, ‘__return_false’ );
add_filter( ‘json_enabled’, ‘__return_false’ );
add_filter( ‘json_jsonp_enabled’, ‘__return_false’ );

En ajoutant ces quelques lignes de code vous désactiverez totalement l’accès aux API XML-RPC et REST de WordPress.

En savoir + sur l’API XML-RPC de WordPress
En savoir + sur l’API-REST de WordPress

Advertisements


1

You must be logged in to post a comment.

Advertisements