WooCommerce beschikt over een handig ingebouwd systeem voor ordernotities (Order Notes). Hiermee kunnen webshopeigenaren interne opmerkingen plaatsen (bijv. "Klant heeft gebeld voor vertraagde levering") of automatische statusupdates naar de klant sturen. Omdat dit systeem flexibel is, wordt het door veel plug-ins misbruikt om gevoelige technische data of logbestanden in op te slaan. Dit kan leiden tot grootschalige Sensitive Data Exposure (blootstelling van gevoelige gegevens) als de toegangscontrole faalt.

Hoe ordernotities gegevens blootleggen

Er zijn twee soorten ordernotities in WooCommerce:

  1. Private Notes (Interne opmerkingen): Alleen zichtbaar voor de winkelbeheerder.

  2. Customer Notes (Notities voor de klant): Zichtbaar voor de klant via de e-mailnotificaties en de "/view-order/" pagina in hun account.

Een veelvoorkomende fout bij plug-in ontwikkelaars is het verkeerd classificeren van deze notities. Een plug-in voor een betaalmethode of een API-koppeling met een extern magazijn logt soms foutopsporingstokens, API-wachtwoorden of ruwe XML/JSON-reacties als een Customer Note in plaats van een Private Note. Hierdoor kan een klant, wanneer hij inlogt in zijn account, diepgaande technische informatie inzien die hem in staat stelt om de achterliggende systemen van de webshop aan te vallen.

SQLi en XSS risico's binnen Order Notes

Zelfs als de notities correct als 'Private' worden gemarkeerd, blijft er een risico bestaan. Als een aanvaller erin slaagt om via een XSS-lek in de winkelwagen of via een formulier kwaadaardige code te injecteren die vervolgens automatisch door een plug-in als ordernotitie wordt opgeslagen, ontstaat er een Stored XSS-lek in het WordPress-dashboard. Zodra de beheerder de bestelling bekijkt, wordt de code uitgevoerd.

Hoe ontwikkelaars ordernotities veilig gebruiken

Bij het programmatisch toevoegen van een notitie aan een WooCommerce order, moeten ontwikkelaars expliciet de parameter is_customer_note op 0 (valse) zetten, tenzij het de absolute bedoeling is dat de klant de tekst te zien krijgt.

PHP
 
$order = wc_get_order($order_id);

// VEILIG: Een strikt interne opmerking toevoegen
$order->add_order_note(
    __('Interne API-koppeling succesvol afgerond. Token: XYZ123', 'my-plugin'),
    0, // 0 = Private Note, 1 = Customer Note
    false // true = stuur e-mail naar klant, false = niet sturen
);

Daarnaast moet alle invoer die in de notitie wordt geplaatst, van tevoren grondig worden opgeschoond met sanitize_text_field() of wp_kses_post().

Advies voor site-beheerders

  • Controleer uw bestellingen: Loop regelmatig door uw recente bestellingen en bekijk de ordernotities aan de rechterkant van het scherm. Ziet u daar complexe code, API-keys of vreemde tekens staan? Onderzoek dan welke plug-in deze notities genereert.

  • Beperk database-toegang: Aangezien ordernotities worden opgeslagen in de wp_comments tabel (met een specifieke comment_type genaamd order_note), moet u ervoor zorgen dat deze tabel net zo strikt wordt beveiligd en gemonitord als de rest van de database.