De WordPress REST API is een krachtige functionaliteit waarmee applicaties extern kunnen communiceren met uw website via gestandaardiseerde JSON-verzoeken. WooCommerce maakt intensief gebruik van de REST API voor mobiele apps, koppelingen met boekhoudsoftware en voorraadbeheersystemen. Hoewel de API flexibiliteit biedt, brengt een onveilige of te openhartige configuratie aanzienlijke privacyrisico's met zich mee. Zonder de juiste beperkingen kunnen kwaadwillenden via openbare eindpunten gevoelige bedrijfsinformatie en gebruikerslijsten oogsten.
Het blootleggen van gebruikersgegevens (User Enumeration)
Een van de bekendste ingebouwde eigenschappen van de WordPress REST API is het /wp-json/wp/v2/users eindpunt. Standaard geeft dit eindpunt een lijst terug met alle gebruikers die openbare berichten hebben gepubliceerd, inclusief hun gebruikersnamen (slugs) en ID's.
Voor een WooCommerce-webshop is dit een groot risico. Aanvallers gebruiken dit eindpunt om geldige gebruikersnamen van administrators en shopmanagers te achterhalen. Zodra zij de exacte gebruikersnaam hebben, hoeven ze via een brute-force aanval alleen nog maar het wachtwoord te raden, wat de kans op een succesvolle hack met 50% vergroot.
Onbeveiligde aangepaste endpoints in WooCommerce-extensies
Naast de core-endpoints kunnen plug-ins van derden hun eigen REST API-routes registreren met de functie register_rest_route(). Een veelgemaakte fout is het niet implementeren van een adequate permission_callback.
// ONVEILIGE REST API REGISTRATIE
register_rest_route('custom-shop/v1', '/orders', array(
'methods' => 'GET',
'callback' => 'get_orders_callback',
'permission_callback' => '__return_true' // Iedereen heeft toegang!
));
Als de permission_callback is ingesteld op __return_true, kan iedereen ter wereld via de URL toegang krijgen tot de data die door de callback wordt geretourneerd, zoals de recente bestellingen of productstatistieken.
Hoe ontwikkelaars REST API routes beveiligen
Bij het registreren van een custom route moeten ontwikkelaars altijd een geldige functie toewijzen aan de permission_callback parameter om te controleren of de huidige aanvrager de juiste rechten heeft (bijvoorbeeld via een API-sleutel of een actieve sessie).
// VEILIGE REST API REGISTRATIE
register_rest_route('custom-shop/v1', '/orders', array(
'methods' => 'GET',
'callback' => 'get_orders_callback',
'permission_callback' => function() {
return current_user_can('manage_woocommerce');
}
));
Praktische stappen voor webshopeigenaren
-
Beperk toegang voor niet-ingelogde gebruikers: Als uw webshop geen openbare REST-functionaliteit voor gasten vereist, kunt u de REST API volledig blokkeren voor niet-geauthenticeerde gebruikers. Dit kan via beveiligingsplug-ins of door code toe te voegen aan uw
functions.php:PHPadd_filter('rest_authentication_errors', function($result) { if (!empty($result)) { return $result; } if (!is_user_logged_in()) { return new WP_Error('rest_not_logged_in', 'Toegang geweigerd.', array('status' => 401)); } return $result; }); -
Gebruik sterke API-sleutels: Als u WooCommerce koppelt met externe systemen, genereer dan unieke API-sleutels via de WooCommerce-instellingen en geef ze uitsluitend de minimaal benodigde rechten (bijv. 'Alleen lezen' in plaats van 'Lezen/Schrijven').
