Prijsmanipulatie jest een specifiek e-commerce risico dat optreedt wanneer een webshop de logica van productprijzen of winkelwagen-totalen aan de client-side (in de browser van de gebruiker) valideert in plaats van op de server. Als een WooCommerce-extensie of een aangepast thema prijzen via verborgen HTML-velden of JavaScript-variabelen naar de checkout stuurt, kan een handige aanvaller deze waarden aanpassen. Hierdoor koopt hij dure producten voor een fractie van de werkelijke prijs, wat leidt tot directe financiële schade voor de winkelier.
Hoe prijsmanipulatie optreedt
WooCommerce zelf heeft een zeer robuuste architectuur waarbij prijzen rechtstreeks uit de database worden berekend op basis van het product-ID. Het probleem ontstaat echter vaak bij plug-ins voor productconfiguraties (bijv. add-ons voor op maat gemaakte tshirts, gravures of dynamische kortingen).
Stel dat een plug-in de extra prijs voor een op maat gemaakte optie berekent via JavaScript en deze waarde via een verborgen invoerveld in een formulier meestuurt:
<input type="hidden" name="custom_option_price" value="49.99" />
Een aanvaller kan de ontwikkelaarstools van zijn browser (F12) openen, de waarde handmatig veranderen naar 0.01 of zelfs -50.00, en op de knop "In winkelmand" klikken. Als de backend-code van de plug-in deze waarde blindelings accepteert en aan de winkelwagen toevoegt zonder te verifiëren of de prijs logisch is, wordt de bestelling met de gemanipuleerde prijs verwerkt.
Impact op het logistieke proces
De impact van prijsmanipulatie is complex. Vaak merkt de webshopeigenaar het lek pas op het moment dat de order al is ingepakt of verzonden, aangezien geautomatiseerde systemen de status "Betaald" registreren zodra de betaling via de payment gateway (zoals Mollie) succesvol is afgerond – ook al was het bedrag onjuist. Dit leidt tot verlies van voorraad, administratieve frustratie en juridische discussies over het annuleren van de koopovereenkomst.
Hoe ontwikkelaars prijsmanipulatie voorkomen
De gouden regel van e-commerce ontwikkeling is: Vertrouw nooit data die afkomstig is van de client. Prijzen moeten altijd op de server worden berekend.
Wanneer u gebruikmaakt van de WooCommerce winkelwagen-API, gebruik dan de actie woocommerce_before_calculate_totals om prijzen op serverniveau te forceren op basis van logische regels, in plaats van formulardata te accepteren:
add_action('woocommerce_before_calculate_totals', 'calculate_custom_price', 10, 1);
function calculate_custom_price($cart) {
if (is_admin() && !defined('DOING_AJAX')) return;
foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
if (isset($cart_item['custom_data'])) {
// Bereken de prijs ALTIJD op de server
$base_price = $cart_item['data']->get_regular_price();
$extra_cost = My_Plugin_Helper::get_internal_cost_for_option($cart_item['custom_data']);
$cart_item['data']->set_price($base_price + $extra_cost);
}
}
}
Advies voor site-eigenaren
-
Test uw eigen checkout: Probeer handmatig een bestelling te plaatsen en gebruik een tool zoals Burp Suite of simpelweg de browserelementen om te kijken of u formulardata kunt aanpassen voordat u afrekent.
-
Controleer ordernotities: WooCommerce logt de transactie-ID's en bedragen van betalingsproviders. Zorg dat u notificaties ontvangt als het betaalde bedrag afwijkt van de oorspronkelijke productwaarde.
