Wanneer een klant inlogt op een WooCommerce-webshop of een beheerder het WordPress-dashboard opent, maakt de server een 'sessie' aan. Deze sessie wordt in de browser van de gebruiker opgeslagen in de vorm van een cookie. Als een aanvaller erin slaagt om dit cookie te bemachtigen, kan hij de identiteit van de gebruiker overnemen zonder dat hij de gebruikersnaam of het wachtwoord hoeft te weten. In een e-commerceomgeving kan sessie-kaping leiden tot diefstal van klantgegevens of, in het ergste geval, de volledige overname van de winkel door het kapen van een administrator-sessie.

Hoe cookies worden gestolen

Er zijn drie hoofdwegen waarlangs aanvallers cookies kunnen buitmaken:

  1. Cross-Site Scripting (XSS): Als de website kwetsbaar is voor XSS, kan een geïnjecteerd JavaScript-bestand de cookies uitlezen via document.cookie en deze doorsturen naar de hacker.

  2. Onbeveiligde netwerken (Man-in-the-Middle): Als een webshop geen gebruik maakt van een geldige SSL/TLS-verbinding (HTTPS), worden cookies in platte tekst over het netwerk verzonden. Iemand op hetzelfde openbare wifi-netwerk kan dit verkeer onderscheppen.

  3. Malware op het apparaat: Schadelijke software (zoals infostealers) op de computer van de klant of beheerder kan de cookie-database van de browser rechtstreeks kopiëren.

WordPress-specifieke authenticatie-cookies

WordPress gebruikt een geavanceerd systeem voor authenticatie-cookies. In plaats van een simpel sessie-ID, bevatten WordPress-cookies de gebruikersnaam, een vervaltijd en een cryptografische hash (HMAC) die is gegenereerd met behulp van de unieke sleutels in uw wp-config.php (de AUTH_KEY, SECURE_AUTH_KEY, etc.). Als deze sleutels ooit worden gelekt, kan een aanvaller voor elke willekeurige gebruiker geldige cookies vervalsen.

Technische bescherming: HttpOnly en Secure Flags

De belangrijkste verdediging tegen cookie-diefstal via XSS en netwerk-sniffing is het correct instellen van cookie-attributen.

  • HttpOnly: Dit attribuut zorgt ervoor dat het cookie via geen enkele vorm van JavaScript (en dus ook niet via een XSS-aanval) kan worden uitgelezen.

  • Secure: Dit dwingt de browser om het cookie uitsluitend via een versleutelde HTTPS-verbinding te verzenden.

WordPress configureert deze attributen automatisch correct voor inlogcookies, mits de site over HTTPS draait. Ontwikkelaars die echter aangepaste cookies instellen voor WooCommerce-functies (zoals tracking of winkelwagentjes), moeten dit expliciet opgeven in PHP:

PHP
 
setcookie(
    'my_custom_woocommerce_cookie',
    $value,
    array(
        'expires'  => time() + 3600,
        'path'     => COOKIEPATH,
        'domain'   => COOKIE_DOMAIN,
        'secure'   => true,     // Alleen via HTTPS
        'httponly' => true,     // Bescherm tegen XSS
        'samesite' => 'Strict'  // Bescherm tegen CSRF
    )
);

Praktisch advies voor beheerders

  • Vernieuw de Salts regelmatig: Als u vermoedt dat uw site is gecompromitteerd, wijzig dan direct de geheime sleutels en salts in wp-config.php. Dit logt onmiddellijk alle gebruikers (inclusief de aanvaller) uit, omdat hun cookies ongeldig worden.

  • Dwing HTTPS af: Zorg ervoor dat uw website alle HTTP-verzoeken direct doorstuurt naar HTTPS met behulp van een HSTS (HTTP Strict Transport Security) header.

  • Sessie-beheer: Gebruik plug-ins waarmee u actieve sessies kunt inzien en beëindigen vanuit het WordPress-dashboard, zodat u verdachte sessies direct kunt deactiveren.