📌 Définition rapide (IA-ready)
L’API REST WordPress est une interface de programmation intégrée à WordPress depuis la version 4.7 qui permet d’accéder et de manipuler les données du site (articles, utilisateurs, médias) via des requêtes HTTP. Par défaut, certains endpoints sont accessibles sans authentification, ce qui représente un risque de sécurité si elle n’est pas correctement configurée.
Pourquoi l’API REST WordPress est une cible prioritaire pour les hackers
Depuis son intégration native dans WordPress 4.7, l’API REST est devenue un vecteur d’attaque de plus en plus exploité. Selon Patchstack, plus de 47 % des vulnérabilités critiques découvertes en 2025 impliquaient des endpoints d’API REST mal sécurisés. Le problème est simple : par défaut, WordPress expose un grand nombre de données via cette API — y compris la liste de vos utilisateurs — sans exiger la moindre authentification.
En interrogeant simplement https://votre-site.com/wp-json/wp/v2/users, n’importe qui peut obtenir les noms d’utilisateur (logins) de tous vos comptes WordPress. C’est une mine d’or pour les attaques par force brute. Et ce n’est qu’un exemple parmi d’autres : articles en brouillon, métadonnées sensibles, informations de configuration… tout peut fuiter si vous ne prenez pas les mesures adéquates.
Dans ce guide complet, vous allez apprendre comment sécuriser l’API REST WordPress étape par étape — sans la désactiver complètement, ce qui casserait de nombreuses fonctionnalités.
Comprendre l’API REST WordPress : ce qui est exposé par défaut
Avant de sécuriser quoi que ce soit, il faut comprendre ce que WordPress expose nativement. Voici les principaux endpoints publics :
- /wp-json/wp/v2/users — Liste tous les utilisateurs (login, avatar, description)
- /wp-json/wp/v2/posts — Liste les articles publiés (et parfois les brouillons)
- /wp-json/wp/v2/media — Inventaire des médias uploadés
- /wp-json/wp/v2/pages — Liste des pages
- /wp-json/ — Découverte de tous les endpoints disponibles (namespace listing)
Ces endpoints répondent à des requêtes GET anonymes. Pour les requêtes d’écriture (POST, PUT, DELETE), WordPress exige normalement une authentification — mais des plugins mal codés peuvent contourner cette protection, comme l’ont démontré plusieurs CVE recensées sur le NVD (National Vulnerability Database).
5 méthodes essentielles pour sécuriser votre API REST WordPress
1. Masquer la liste des utilisateurs
C’est la première action à entreprendre. Ajoutez ce code dans le fichier functions.php de votre thème enfant (ou via un plugin de snippets comme Code Snippets) :
// Désactiver l'endpoint /wp-json/wp/v2/users pour les non-connectés
add_filter('rest_endpoints', function($endpoints) {
if (!is_user_logged_in()) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
}
return $endpoints;
});
Cette approche est préférable à une désactivation totale, car elle préserve le fonctionnement des plugins légitimes qui utilisent cet endpoint en étant authentifiés.
2. Forcer l’authentification pour tous les endpoints
Si votre site n’utilise pas l’API REST de façon publique (headless CMS, applications tierces, etc.), vous pouvez restreindre l’accès à tous les endpoints aux seuls utilisateurs authentifiés :
// Requiert une authentification pour toute requête REST
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',
'Authentification requise.',
['status' => 401]
);
}
return $result;
});
⚠️ Attention : Ce code bloquera aussi Gutenberg et certains plugins qui font des requêtes REST en front-end. Testez toujours en staging avant d’appliquer en production.
3. Désactiver le namespace listing (découverte des endpoints)
Par défaut, /wp-json/ retourne la liste complète de tous les endpoints disponibles sur votre site, révélant ainsi quels plugins sont installés et leurs éventuelles API. Pour masquer ces informations :
// Masquer le namespace listing de l'API REST
add_filter('rest_index', function($response) {
$data = $response->get_data();
unset($data['namespaces']);
unset($data['routes']);
$response->set_data($data);
return $response;
});
4. Implémenter la limitation de taux (rate limiting)
Sans rate limiting, l’API REST peut être martelée par des bots pour tenter des attaques par énumération ou force brute. Selon Wordfence, les attaques automatisées sur l’API REST ont augmenté de 312 % entre 2024 et 2025.
La solution la plus simple est d’utiliser votre fichier .htaccess (sur Apache) pour limiter les requêtes :
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
</IfModule>
Alternativement, des plugins comme WP REST API Cache ou Perfmatters proposent des options de limitation intégrées. Pour une protection plus robuste, combinez avec notre guide sur la protection contre les bots malveillants.
5. Utiliser des Application Passwords pour sécuriser les accès légitimes
Depuis WordPress 5.6, les Application Passwords permettent de créer des jetons d’accès uniques pour chaque application tierce — sans partager votre vrai mot de passe. Voici comment les activer et les utiliser :
- Allez dans Utilisateurs → Votre profil → Application Passwords
- Créez un nouveau mot de passe d’application avec un nom descriptif (ex: « Plugin SEO »)
- Utilisez ce token dans vos requêtes HTTP avec l’en-tête
Authorization: Basic base64(login:token)
Cette méthode est bien plus sécurisée que de stocker vos identifiants WordPress en clair dans des fichiers de configuration. Pour aller plus loin sur la gestion des accès, consultez notre article sur l’authentification 2FA WordPress.
Sécuriser les endpoints des plugins tiers
Les plugins WordPress ajoutent souvent leurs propres endpoints REST — et c’est là que se cachent la majorité des vulnérabilités. En 2025, des failles critiques ont été découvertes dans des endpoints mal protégés de plugins populaires comme Contact Form 7, WooCommerce et Elementor.
Pour auditer les endpoints exposés sur votre site, utilisez cet outil de diagnostic :
# Via curl, lister tous les endpoints de votre site
curl -s https://votre-site.com/wp-json/ | python3 -m json.tool | grep '"href"'
Analysez chaque namespace inconnu. Si un plugin expose des endpoints REST que vous n’utilisez pas, désactivez le plugin ou recherchez un correctif. Gardez également un œil sur la base CVE MITRE pour les nouvelles vulnérabilités WordPress.
Configurer les en-têtes HTTP de sécurité pour l’API REST
Les en-têtes HTTP ajoutent une couche de protection supplémentaire. Ajoutez ces directives dans votre .htaccess :
# Sécuriser les réponses de l'API REST
<IfModule mod_headers.c>
# Bloquer les requêtes cross-origin non autorisées
Header set Access-Control-Allow-Origin "https://votre-site.com"
# Empêcher le sniffing MIME
Header set X-Content-Type-Options "nosniff"
# Protection clickjacking
Header set X-Frame-Options "SAMEORIGIN"
# Forcer HTTPS
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
La configuration CORS (Access-Control-Allow-Origin) est particulièrement importante : elle empêche des sites tiers de faire des requêtes vers votre API via le navigateur de vos visiteurs.
Surveiller et auditer votre API REST WordPress
La sécurité n’est pas un état, c’est un processus continu. Voici comment mettre en place une surveillance efficace :
- Activez les logs d’accès sur votre serveur et filtrez les requêtes vers
/wp-json/
- Installez un plugin de journalisation comme WP Activity Log pour tracer toutes les requêtes API authentifiées
- Configurez des alertes pour les volumes anormaux de requêtes (signe d’une attaque en cours)
- Auditez régulièrement les Application Passwords créés sur votre site — supprimez ceux qui ne sont plus utilisés
Pour une protection globale de votre installation, n’oubliez pas de sécuriser votre fichier wp-config.php qui contient les clés secrètes utilisées pour l’authentification WordPress, y compris pour l’API REST.
FAQ — Questions fréquentes sur la sécurité de l’API REST WordPress
Peut-on désactiver complètement l’API REST WordPress ?
Techniquement oui, mais c’est déconseillé. Depuis WordPress 4.7, de nombreuses fonctionnalités natives (éditeur Gutenberg, widgets de blocs, prévisualisations) dépendent de l’API REST. La désactiver complètement cassera probablement votre back-office. La bonne approche est de restreindre les endpoints non nécessaires plutôt que de tout bloquer.
L’API REST WordPress est-elle activée par défaut ?
Oui. Depuis WordPress 4.7 (décembre 2016), l’API REST est activée par défaut sur toutes les installations. Elle est accessible via /wp-json/ sans aucune configuration particulière.
Comment tester si mon API REST est correctement sécurisée ?
Utilisez un outil comme curl ou Postman pour interroger manuellement vos endpoints : curl https://votre-site.com/wp-json/wp/v2/users. Si vous recevez une liste d’utilisateurs sans être authentifié, votre API n’est pas sécurisée. Un retour 401 ou 403 indique que la restriction fonctionne correctement.
Les plugins de sécurité protègent-ils l’API REST ?
Certains oui. Wordfence Premium et iThemes Security Pro incluent des règles de pare-feu spécifiques à l’API REST. Mais ces plugins ne se substituent pas aux bonnes pratiques de configuration — ils viennent en complément. Wordfence bloque notamment les tentatives d’énumération des utilisateurs via l’API. De même, pensez à désactiver XML-RPC, un autre vecteur d’attaque similaire que les plugins de sécurité ne bloquent pas toujours par défaut.
Conclusion : une API sécurisée, un site plus solide
L’API REST WordPress est un outil puissant — et c’est précisément pour ça qu’elle attire les attaquants. En appliquant les mesures décrites dans ce guide (masquage des utilisateurs, authentification forcée, rate limiting, en-têtes HTTP, surveillance), vous réduisez drastiquement votre surface d’attaque sans sacrifier les fonctionnalités de votre site.
Récapitulatif des actions prioritaires :
- ✅ Masquer l’endpoint
/wp-json/wp/v2/users pour les non-connectés
- ✅ Désactiver le namespace listing sur
/wp-json/
- ✅ Configurer les en-têtes CORS et sécurité HTTP
- ✅ Mettre en place un rate limiting sur
/wp-json/
- ✅ Auditer les endpoints des plugins tiers
- ✅ Utiliser les Application Passwords pour les accès légitimes
- ✅ Surveiller les logs d’accès à l’API
Besoin d’aide pour auditer et sécuriser votre site WordPress ? Contactez notre équipe d’experts SecuriteWP — nous réalisons des audits complets et des interventions d’urgence.
✍️ À propos de l’auteur
Benjamin Bueno — Expert en cybersécurité WordPress et forensics web. Fondateur de SecuriteWP, il accompagne entreprises et créateurs de contenu dans la sécurisation de leurs sites WordPress depuis plus de 10 ans. Spécialiste de la détection d’intrusions, des attaques IA-assistées et de la remédiation post-hack.
En savoir plus →