De map wp-content/uploads/ is de centrale locatie waar WordPress en WooCommerce alle media, productafbeeldingen, digitale downloads en facturen opslaan. Omdat deze map schrijfrechten moet hebben voor de webserver om uploads mogelijk te maken, is het een primair doelwit voor hackers. Als een aanvaller erin slaagt om via een lek in een plug-in een PHP-bestand in deze map te plaatsen, is de site kwetsbaar voor totale overname – tenzij de uitvoering van PHP binnen deze specifieke map expliciet is geblokkeerd.

Het anatomische verloop van een upload-exploit

Veel exploits (zoals Arbitrary File Upload) hebben als doel het plaatsen van een zogenaamde webshell (een kwaadaardig PHP-script) op de server. Zodra het bestand shell.php in de map wp-content/uploads/2026/06/ staat, hoeft de hacker alleen maar dit pad op te vragen in zijn browser.

De webserver (Apache of Nginx) ziet dat het bestand eindigt op .php, start de PHP-interpreter en voert de commando's uit. Vanaf dat moment heeft de hacker een interface waarmee hij bestanden kan verwijderen, de database kan leegtrekken of malware kan verspreiden. Het is daarom van cruciaal belang om een verdedigingslinie op te zetten op serverniveau: zorg dat PHP-bestanden in de uploads-map wel opgeslagen, maar nooit uitgevoerd kunnen worden.

Hardening via Apache (.htaccess)

Als uw webshop draait op een Apache-webserver (of een server die .htaccess bestanden ondersteunt, zoals Litespeed), kunt u de uitvoering van PHP heel eenvoudig blokkeren.

Maak een nieuw tekstbestand aan, noem het exact .htaccess, en plaats dit bestand rechtstreeks in de map wp-content/uploads/. Voeg de volgende regels toe:

Apache
 
<Files *.php>
    Order deny,allow
    Deny from all
</Files>

Indien uw hostingprovider een modernere versie van Apache gebruikt, is de volgende syntax vaak nog effectiever:

Apache
 
<IfModule mod_php7.c>
    php_flag engine off
</IfModule>
<IfModule mod_php.c>
    php_flag engine off
</IfModule>
RemoveHandler .php .phtml

Dit zorgt ervoor dat de server een PHP-bestand in deze map behandelt als platte tekst (of toegang weigert) in plaats van het uit te voeren.

Hardening via Nginx

Nginx maakt geen gebruik van .htaccess bestanden. Als uw WooCommerce-shop op een Nginx-server draait, moet u de configuratie aanpassen in het centrale serverblok (meestal te vinden in /etc/nginx/sites-available/). Voeg de volgende locatieregel toe:

Nginx
 
location ~* ^/wp-content/uploads/.*\.php$ {
    deny all;
    access_log off;
    log_not_found off;
}

Herstart Nginx na deze wijziging (sudo systemctl restart nginx). Vanaf dat moment zal elke poging om een PHP-bestand binnen de uploads-map aan te roepen resulteren in een directe 403 Forbidden-foutmelding.

Conclusie

Deze servermaatregel is een van de krachtigste vormen van proactieve beveiliging. Zelfs als een van uw dertig WooCommerce-plug-ins morgen een kritiek uploadlek blijkt te hebben en een hacker een kwaadaardig script uploadt, blijft de schade beperkt omdat het script simpelweg weigert te starten.