WordPress a longtemps priorisé l’extensibilité et l’ouverture, c’est pourquoi il a introduit le REPOS API (également appelé le Json Api). Cette fonctionnalité permet aux développeurs de créer plus facilement des applications qui interagissent avec le contenu WordPress de manière standardisée, que ce soit pour récupérer les publications, mettre à jour les paramètres ou s’intégrer à d’autres plates-formes. Cependant, toutes ces capacités ne sont pas idéales pour la consommation publique, en particulier lorsqu’il s’agit d’exposer des informations sensibles telles que les données utilisateur enregistrées.
L’un des préoccupations de sécurité généralement négligées est le /wp/v2/users
Point de terminaison de repos. Si vous accédez à ce chemin sur votre site WordPress, vous verrez une liste de vos utilisateurs. Par défaut, ce point de terminaison permet visiteurs non authentifiés Pour récupérer une liste des comptes d’utilisateurs sur le site, exposant généralement des noms d’utilisateur, des noms d’affichage et des ID utilisateur. Bien que les mots de passe et les e-mails ne soient pas révélés, l’exposition publique des noms d’utilisateur est un vecteur connu pour force brute et Attaques d’énumération. Connaître un nom d’utilisateur valide est la moitié de la bataille pour un attaquant qui tente d’accéder à la farce des informations d’identification ou à l’automatisation de la connexion.
Pourquoi exposer les noms d’utilisateur est un problème
Même si WordPress ne montre pas de mots de passe, rendre les noms d’utilisateur publics peut sérieusement affaiblir les défenses de votre site. Voici pourquoi cette pratique devrait être évitée:
- Farce d’identification et attaques de force brute: Avec les noms d’utilisateur à la main, les attaquants peuvent utiliser des outils automatisés pour tenter des connexions de mot de passe.
- Phishing ciblé: Une liste connue d’utilisateurs (en particulier les administrateurs ou les éditeurs) peut devenir l’objectif des campagnes d’ingénierie sociale ou de phishing.
- Énumération pour la reconnaissance: Exposer les données des utilisateurs aide les attaquants à cartographier votre site et à évaluer les vecteurs potentiels pour l’escalade des privilèges ou l’abus de plugin.
Mais l’API JSON n’est-elle pas utilisée en interne?
Oui, et c’est une distinction importante. L’API WordPress REST est utilisée non seulement par des applications tierces, mais aussi par le noyau WordPress lui-même. Par exemple, l’éditeur de blocs (Gutenberg) s’appuie sur des points de terminaison de repos pour gérer les blocs, les autosaves et les aperçus. La désactivation de l’API REST briserait entièrement de nombreux aspects de votre site pour les administrateurs et les utilisateurs.
La solution n’est pas de supprimer complètement l’API de repos, mais plutôt de durcir des critères d’évaluation spécifiques comme /wp/v2/users,
afin qu’ils ne renvoient que des données pour les utilisateurs authentifiés avec des autorisations appropriées. De cette façon, l’API REST continue d’alimenter le tableau de bord d’administration et les plugins comme prévu, mais maintient les données sensibles interdites aux utilisateurs anonymes.
Comment désactiver l’accès public au point de terminaison des utilisateurs
Le moyen le plus ciblé et le plus adapté aux performances de sécuriser le point de terminaison de l’utilisateur est en modifiant son rappel d’autorisationmodifiant essentiellement les règles sur qui peut le voir.
Vous pouvez le faire de deux manières: en ajoutant du code au thème de votre enfant functions.php
fichier ou en créant un simple plugin personnalisé.
Option 1: ajouter à functions.php
Collez l’extrait suivant dans le thème de votre enfant functions.php
déposer. Ce code restreint l’accès à la liste d’utilisateurs et aux points de terminaison détaillées à moins que le visiteur ne puisse modifier les publications – IE, ils sont un contributeur, un éditeur ou un administrateur connecté.
add_filter( 'rest_endpoints', function( $endpoints ) {
if ( isset( $endpoints['/wp/v2/users'] ) ) {
$endpoints['/wp/v2/users'][0]['permission_callback'] = function () {
return current_user_can( 'edit_posts' );
};
}
if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
$endpoints['/wp/v2/users/(?P<id>[\d]+)'][0]['permission_callback'] = function () {
return current_user_can( 'edit_posts' );
};
}
return $endpoints;
} );
Cela permet à votre backend de continuer à fonctionner correctement pour les utilisateurs connectés tout en empêchant l’accès non autorisé aux métadonnées du compte d’utilisateur.
Option 2: Créez un plugin simple
Si vous préférez ne pas compter sur votre thème functions.php
Fichier – en particulier si vous utilisez un thème enfant ou prévoyez de changer de thèmes – vous pouvez utiliser le même code qu’un plugin léger:
- Dans votre répertoire WordPress, allez à
/wp-content/plugins/
- Créez un nouveau dossier, par exemple:
disable-public-users-endpoint
- Créez un nouveau fichier de dossier, par exemple:
disable-public-users-endpoint.php
- Collez le code suivant:
<?php
/*
Plugin Name: Disable Public Users Endpoint
Description: Restricts access to the REST API users endpoint to logged-in users with 'edit_posts' capability.
Version: 1.0
Author: Douglas Karr
Author URl: https://dknewmedia.com
*/
add_filter( 'rest_endpoints', function( $endpoints ) {
if ( isset( $endpoints['/wp/v2/users'] ) ) {
$endpoints['/wp/v2/users'][0]['permission_callback'] = function () {
return current_user_can( 'edit_posts' );
};
}
if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
$endpoints['/wp/v2/users/(?P<id>[\d]+)'][0]['permission_callback'] = function () {
return current_user_can( 'edit_posts' );
};
}
return $endpoints;
} );
- Enregistrez le fichier et activez le plugin via l’administrateur WordPress.
Cette approche est plus sûre pour la maintenabilité à long terme et peut être contrôlée par la version comme tout autre plugin.
Tester vos modifications
Une fois que vous avez ajouté le code ou activé votre plugin, vous pouvez le tester en visitant:
https://yoursite.com/wp-json/wp/v2/users
Si vous pas connectéla réponse devrait maintenant être un 403 Forbidden
erreur. Si vous êtes connecté avec des autorisations appropriées, le point de terminaison renverra toujours les données de l’utilisateur.
Réflexions finales
L’API WordPress REST est un outil essentiel pour le développement moderne, mais il ne devrait pas se faire au prix de l’hygiène de base de la sécurité. Par défaut, l’Open /users
Le point de terminaison est une responsabilité potentielle facile à ignorer, en particulier sur les petits sites où la sécurité est supposée plutôt que forcée.
Le verrouiller vers le bas est un ajustement mineur avec des avantages importants: une intimité améliorée, une surface d’attaque inférieure et un signal plus clair que votre site est activement durci par les techniques d’exploitation standard. Si vous insérez quelques lignes dans functions.php
Ou enveloppez-le comme un plugin, c’est une meilleure pratique que chaque administrateur WordPress devrait considérer.
juillet 14, 2025
WordPress: Pourquoi le point de terminaison de l’utilisateur de l’API JSON est un risque et comment sécuriser votre site
WordPress a longtemps priorisé l’extensibilité et l’ouverture, c’est pourquoi il a introduit le REPOS API (également appelé le Json Api). Cette fonctionnalité permet aux développeurs de créer plus facilement des applications qui interagissent avec le contenu WordPress de manière standardisée, que ce soit pour récupérer les publications, mettre à jour les paramètres ou s’intégrer à d’autres plates-formes. Cependant, toutes ces capacités ne sont pas idéales pour la consommation publique, en particulier lorsqu’il s’agit d’exposer des informations sensibles telles que les données utilisateur enregistrées.
L’un des préoccupations de sécurité généralement négligées est le
/wp/v2/users
Point de terminaison de repos. Si vous accédez à ce chemin sur votre site WordPress, vous verrez une liste de vos utilisateurs. Par défaut, ce point de terminaison permet visiteurs non authentifiés Pour récupérer une liste des comptes d’utilisateurs sur le site, exposant généralement des noms d’utilisateur, des noms d’affichage et des ID utilisateur. Bien que les mots de passe et les e-mails ne soient pas révélés, l’exposition publique des noms d’utilisateur est un vecteur connu pour force brute et Attaques d’énumération. Connaître un nom d’utilisateur valide est la moitié de la bataille pour un attaquant qui tente d’accéder à la farce des informations d’identification ou à l’automatisation de la connexion.Pourquoi exposer les noms d’utilisateur est un problème
Même si WordPress ne montre pas de mots de passe, rendre les noms d’utilisateur publics peut sérieusement affaiblir les défenses de votre site. Voici pourquoi cette pratique devrait être évitée:
Mais l’API JSON n’est-elle pas utilisée en interne?
Oui, et c’est une distinction importante. L’API WordPress REST est utilisée non seulement par des applications tierces, mais aussi par le noyau WordPress lui-même. Par exemple, l’éditeur de blocs (Gutenberg) s’appuie sur des points de terminaison de repos pour gérer les blocs, les autosaves et les aperçus. La désactivation de l’API REST briserait entièrement de nombreux aspects de votre site pour les administrateurs et les utilisateurs.
La solution n’est pas de supprimer complètement l’API de repos, mais plutôt de durcir des critères d’évaluation spécifiques comme
/wp/v2/users,
afin qu’ils ne renvoient que des données pour les utilisateurs authentifiés avec des autorisations appropriées. De cette façon, l’API REST continue d’alimenter le tableau de bord d’administration et les plugins comme prévu, mais maintient les données sensibles interdites aux utilisateurs anonymes.Comment désactiver l’accès public au point de terminaison des utilisateurs
Le moyen le plus ciblé et le plus adapté aux performances de sécuriser le point de terminaison de l’utilisateur est en modifiant son rappel d’autorisationmodifiant essentiellement les règles sur qui peut le voir.
Vous pouvez le faire de deux manières: en ajoutant du code au thème de votre enfant
functions.php
fichier ou en créant un simple plugin personnalisé.Option 1: ajouter à
functions.php
Collez l’extrait suivant dans le thème de votre enfant
functions.php
déposer. Ce code restreint l’accès à la liste d’utilisateurs et aux points de terminaison détaillées à moins que le visiteur ne puisse modifier les publications – IE, ils sont un contributeur, un éditeur ou un administrateur connecté.Cela permet à votre backend de continuer à fonctionner correctement pour les utilisateurs connectés tout en empêchant l’accès non autorisé aux métadonnées du compte d’utilisateur.
Option 2: Créez un plugin simple
Si vous préférez ne pas compter sur votre thème
functions.php
Fichier – en particulier si vous utilisez un thème enfant ou prévoyez de changer de thèmes – vous pouvez utiliser le même code qu’un plugin léger:/wp-content/plugins/
disable-public-users-endpoint
disable-public-users-endpoint.php
Cette approche est plus sûre pour la maintenabilité à long terme et peut être contrôlée par la version comme tout autre plugin.
Tester vos modifications
Une fois que vous avez ajouté le code ou activé votre plugin, vous pouvez le tester en visitant:
Si vous pas connectéla réponse devrait maintenant être un
403 Forbidden
erreur. Si vous êtes connecté avec des autorisations appropriées, le point de terminaison renverra toujours les données de l’utilisateur.Réflexions finales
L’API WordPress REST est un outil essentiel pour le développement moderne, mais il ne devrait pas se faire au prix de l’hygiène de base de la sécurité. Par défaut, l’Open
/users
Le point de terminaison est une responsabilité potentielle facile à ignorer, en particulier sur les petits sites où la sécurité est supposée plutôt que forcée.Le verrouiller vers le bas est un ajustement mineur avec des avantages importants: une intimité améliorée, une surface d’attaque inférieure et un signal plus clair que votre site est activement durci par les techniques d’exploitation standard. Si vous insérez quelques lignes dans
functions.php
Ou enveloppez-le comme un plugin, c’est une meilleure pratique que chaque administrateur WordPress devrait considérer.Source link
Partager :
Articles similaires