De product-zoekbalk is een van de meest gebruikte elementen op een WooCommerce-webshop. Het stelt bezoekers in staat om snel door het assortiment te navigeren. Omdat de zoekbalk intensief communiceert met de frontend (door de zoekterm weer te geven op de resultatenpagina), vormt het een primair doelwit voor Reflected Cross-Site Scripting (XSS) als de weergave de de zoekterm niet correct is gecodeerd.
Hoe Reflected XSS werkt in de zoekbalk
Reflected XSS treedt op wanneer een applicatie onveilige gebruikersinvoer ontvangt en deze direct teruggeeft aan de browser, zonder de code onschadelijk te maken. Stel dat een klant zoekt naar de term schoenen. De webshop laadt de resultatenpagina en toont de tekst: "Zoekresultaten voor: schoenen"
Het onderliggende thema gebruikt de volgende (onveilige) code om de zoekterm te tonen:
echo '<h2>Zoekresultaten voor: ' . $_GET['s'] . '</h2>';
Een aanvaller kan een speciale link construeren waarbij de zoekparameter s kwaadaardige JavaScript-code bevat: https://uwshop.nl/?s=<script>MaliciousCode()</script>
De aanvaller verspreidt deze link via phishing-e-mails naar uw klanten. Wanneer een klant op de link klikt, opent uw echte webshop. Echter, omdat het thema de zoekterm onveilig op de pagina print, zal de browser van de klant het kwaadaardige script uitvoeren. Dit script kan vervolgens cookies stelen of de checkout-pagina manipuleren.
Hoe ontwikkelaars Reflected XSS voorkomen
Het voorkomen van Reflected XSS in de zoekbalk is een fundamentele taak voor thema-ontwikkelaars. De invoer uit de $_GET['s'] parameter (of de WordPress-functie get_search_query()) moet altijd verplicht worden ge-escaped voordat deze naar het scherm wordt gestuurd.
Gebruik de specifieke WordPress-functie esc_html() om alle HTML-tags onschadelijk te maken:
// ONVEILIGE AANPAK
echo '<h2>Zoekresultaten voor: ' . get_search_query() . '</h2>';
// VEILIGE AANPAK
echo '<h2>Zoekresultaten voor: ' . esc_html( get_search_query() ) . '</h2>';
Als esc_html() de tag <script> tegenkomt, zet het deze om naar <script>. Hierdoor wordt de code simpelweg als tekst op het scherm getoond en zal de browser de code niet uitvoeren.
Advies voor site-beheerders
-
Controleer uw zoekpagina: Typ handmatig een basale HTML-tag (zoals
<b>test</b>) in de zoekbalk van uw webshop. Als de tekst op de resultatenpagina in dikgedrukte letters verschijnt, betekent dit dat uw thema HTML-code uitvoert en mogelijk kwetsbaar is voor XSS. Neem in dat geval direct contact op met de thema-ontwikkelaar.
