La REST API WordPress est activée par défaut sur toute installation depuis la version 4.7 et expose un nombre considérable d’informations via des URL accessibles publiquement sans authentification. Sur un site WordPress fraîchement installé, n’importe quel visiteur peut récupérer la liste complète des comptes utilisateurs (et donc les identifiants à attaquer par force brute), la liste de tous les articles brouillons (qui ne devraient pas être visibles), des métadonnées sur les plugins installés et leur version (utile à un attaquant pour cibler les failles connues). Cette ouverture par défaut est un choix d’API moderne mais elle se traduit en risques concrets pour les sites WordPress de PME qui n’en ont pas conscience. Heureusement, quelques règles simples permettent de fermer les endpoints les plus sensibles sans casser les fonctionnalités utiles. Chez Propuls’Lead, nous appliquons systématiquement un durcissement REST API sur tous les sites WordPress que nous mettons en production, parce que ces fuites silencieuses facilitent énormément le travail des attaquants.
Comprendre ce que la REST API WordPress expose par défaut
La REST API WordPress est accessible via l’URL /wp-json/ à la racine de tout site WordPress. Cette URL retourne un index JSON qui liste tous les endpoints disponibles, organisés par namespace. Le namespace principal wp/v2 contient les ressources standard : posts, pages, users, categories, tags, comments, media. Chaque endpoint accepte des requêtes GET pour la lecture publique et des requêtes POST, PUT, DELETE pour la modification authentifiée.
L’endpoint /wp-json/wp/v2/users est le plus problématique sur un site WordPress non durci : il retourne la liste de tous les utilisateurs ayant publié au moins un contenu, avec leur identifiant numérique, leur nom d’affichage, leur slug (qui sert souvent de login), et leur URL d’archive d’auteur. Un attaquant qui interroge cette URL obtient en quelques secondes la liste complète des identifiants à tester contre /wp-login.php. Cette divulgation transforme une attaque par force brute aveugle en attaque ciblée avec un taux de succès bien plus élevé.
D’autres endpoints exposent des informations moins critiques mais utiles à un attaquant : /wp-json/wp/v2/posts liste tous les articles publiés (et parfois les brouillons selon la configuration), /wp-json/wp/v2/pages liste les pages, /wp-json/oembed/1.0/embed permet de récupérer des embeds depuis n’importe quelle URL du site. Le simple fait que /wp-json/ retourne une réponse confirme qu’il s’agit d’un site WordPress et permet à un attaquant de cibler ses outils. Notre article sur sécuriser son site WordPress avec les 10 actions qui bloquent 99 % des attaques revient sur les fuites d’information complémentaires (version WordPress, fichiers readme) qui forment le portrait technique exposé.
Bloquer l’énumération des utilisateurs via l’endpoint users
La fermeture de l’endpoint /wp-json/wp/v2/users est la priorité numéro un du durcissement REST API. Trois méthodes permettent de bloquer l’accès non authentifié à cet endpoint, avec des compromis différents entre simplicité et flexibilité.
Méthode 1 : ajout d’un filtre PHP dans le fichier functions.php du thème enfant ou dans un plugin Must-Use. Le filtre rest_endpoints permet de retirer entièrement l’endpoint users du registre REST API : si l’utilisateur n’est pas authentifié avec une capacité minimale, l’endpoint retourne 401. Cette méthode est la plus propre techniquement et survit aux mises à jour du thème principal. Une dizaine de lignes de PHP suffisent.
Méthode 2 : installation d’un plugin de sécurité qui inclut cette fonctionnalité. Wordfence Premium, Sucuri Security, iThemes Security ou Disable REST API proposent tous une option simple pour bloquer l’énumération des utilisateurs. Cette méthode convient aux entrepreneurs non développeurs qui préfèrent une interface graphique.
Méthode 3 : règle .htaccess qui bloque les requêtes vers /wp-json/wp/v2/users sans authentification. Cette méthode est la plus performante (le blocage se fait au niveau Apache avant que PHP ne soit chargé) mais elle est plus fragile aux changements de structure d’URL. Quelle que soit la méthode choisie, le test final consiste à charger /wp-json/wp/v2/users dans un navigateur en navigation privée : la réponse doit être un 401 ou un message d’erreur générique, pas la liste des utilisateurs. Notre article sur protéger sa page de connexion WordPress contre les attaques par force brute revient sur la protection complémentaire de la page de connexion qui devient la cible évidente une fois les identifiants devinables.
Restreindre les endpoints sensibles selon les besoins du site
Au-delà de l’endpoint users, plusieurs autres endpoints méritent une restriction selon le profil du site. Sites vitrine sans application mobile ni intégration tierce : la REST API n’a aucune utilité publique et peut être complètement désactivée pour les utilisateurs non authentifiés. Le plugin Disable REST API permet cette désactivation totale en deux clics, sans casser l’interface d’administration WordPress qui utilise la REST API en interne.
Sites e-commerce WooCommerce : la REST API de WooCommerce (namespace wc/v3) est nécessaire pour les intégrations comptables, les outils de synchronisation de stock, et certaines applications mobiles. Garder cette API active mais s’assurer qu’elle exige une clé API authentifiée pour toute requête. Vérifier dans WooCommerce > Settings > Advanced > REST API qu’aucune clé API obsolète ne reste active.
Sites multi-auteurs ou avec blog actif : garder l’endpoint posts public est légitime pour permettre aux outils de syndication et aux applications mobiles d’accéder au contenu. Mais restreindre l’endpoint users et l’endpoint comments aux utilisateurs authentifiés. Vérifier également que l’endpoint /wp-json/wp/v2/posts ne retourne pas les brouillons (filtre status=publish par défaut). Notre article sur WordPress et permissions fichiers, les réglages serveur qui protègent votre site revient sur les contrôles serveur qui complètent les restrictions applicatives.
Surveiller les abus de la REST API via le logging et le rate limiting
Une fois les endpoints sensibles fermés, la surveillance des tentatives d’accès permet de détecter les attaquants et de bloquer leurs IP. Trois mécanismes complémentaires forment cette surveillance. Mécanisme 1 : le logging des requêtes REST API via un plugin dédié (WP REST API Log) ou via l’analyse des logs d’accès serveur. Ce logging permet de voir quelles IP interrogent quels endpoints et à quelle fréquence. Une IP qui interroge /wp-json/wp/v2/users 50 fois en cinq minutes est manifestement en train d’énumérer les utilisateurs et mérite un blocage immédiat.
Mécanisme 2 : le rate limiting qui plafonne le nombre de requêtes REST API par IP et par minute. Wordfence Premium, Cloudflare Pro, ou un plugin comme WP REST API Rate Limit permettent ce plafonnement. La règle typique : 60 requêtes par minute pour les utilisateurs non authentifiés, 600 requêtes par minute pour les utilisateurs authentifiés. Au-delà, les requêtes sont rejetées avec un code 429.
Mécanisme 3 : la mise à profit de Cloudflare Web Application Firewall (gratuit dans le plan free) qui propose des règles spécifiques pour les API WordPress. Ces règles bloquent automatiquement les patterns d’abus connus, comme les énumérations massives ou les tentatives d’exploitation de failles REST API documentées. Notre article sur Wordfence vs Sucuri, quel plugin de sécurité WordPress choisir pour une PME revient sur le choix d’écosystème de sécurité qui intègre ces mécanismes de surveillance.
Industrialiser le durcissement REST API dans la méthodologie PROPULSE
Dans le cadre de la méthodologie PROPULSE que nous appliquons chez Propuls’Lead, le durcissement REST API suit un protocole standard adapté au profil du site. Profil 1 : site vitrine sans intégration tierce. La REST API publique est complètement désactivée via plugin Disable REST API, ce qui ne casse rien et ferme toutes les fuites. La REST API reste accessible aux utilisateurs authentifiés pour les besoins de l’administration WordPress.
Profil 2 : site avec blog actif ou application mobile. La REST API publique reste active mais l’endpoint users est bloqué via filtre PHP, les brouillons ne sont jamais exposés, le rate limiting est plafonné à 60 requêtes par minute par IP non authentifiée. Profil 3 : site e-commerce WooCommerce. La REST API WooCommerce est protégée par clés API obligatoires, les clés sont rotées tous les six mois, le rate limiting est plafonné à 600 requêtes par minute par clé authentifiée. Les requêtes anormales déclenchent une alerte au consultant en charge du site.
Pour les trois profils, un test de vérification mensuel automatisé charge /wp-json/wp/v2/users sans authentification depuis une IP externe et alerte si la réponse contient des données utilisateur. Ce test garantit qu’aucun plugin nouvellement installé ou aucune mise à jour n’a ré-ouvert l’endpoint par mégarde. Sur les sites e-commerce que nous accompagnons, ce protocole a détecté en deux ans deux cas d’ouverture accidentelle de l’endpoint users suite à une mise à jour de plugin, refermés sous 24 heures avant exploitation par un attaquant. Notre article sur WordPress et sauvegardes, la règle 3-2-1 appliquée à un site web revient sur le filet de sécurité qui complète le durcissement applicatif.
Ce qu’il faut retenir pour sécuriser la REST API WordPress
La REST API WordPress est ouverte par défaut et expose des informations utiles aux attaquants. Cinq points clés à retenir : l’endpoint users expose la liste des identifiants à attaquer par force brute et doit être bloqué en priorité, la fermeture passe par un filtre PHP, un plugin de sécurité, ou une règle .htaccess selon le profil technique, les sites vitrine peuvent désactiver complètement la REST API publique sans rien casser, les sites avec API tierces gardent l’API active mais restreignent les endpoints sensibles et plafonnent le rate par IP, le test mensuel automatisé garantit qu’aucune mise à jour n’a ré-ouvert un endpoint accidentellement. Chez Propuls’Lead, ce durcissement systématique réduit drastiquement la surface d’attaque et ferme une porte d’entrée souvent oubliée des entrepreneurs.
