Malware verwijderen uit WordPress: een opschoonprotocol zonder herbesmetting
Wie malware uit WordPress wil verwijderen met één klik, legt vaak de basis voor de volgende besmetting. De scanner wist drie verdachte bestanden, de site lijkt genezen en een week later duikt dezelfde code weer op, omdat er een achterdeur is achtergebleven in de media, de database of een geplande taak.
Référenceur is een online marketingbureau uit België en Luxemburg dat zzp’ers, mkb-bedrijven en stichtingen begeleidt bij een volledige, gedocumenteerde opschoning, op afstand van de eerste diagnose tot de herlancering. In deze gids lees je het protocol, de controles die je zelf kunt doen en de stappen die je beter aan een specialist of je hostingprovider overlaat.
Test de beveiliging van je WordPress-site: start hieronder meteen een eerste gratis scan met onze tool.
Heb je de aanval net ontdekt? Bescherm dan eerst je bezoekers met een onderhoudspagina en licht je hostingprovider in. Met de gratis scan op deze pagina krijg je daarnaast een eerste beeld van je domein.
Een virus verwijderen begint met bewijs veiligstellen
De eerste reflex, alles wissen wat afwijkend lijkt, vernietigt ook de aanwijzingen. Maak voordat je iets verwijdert een volledige kopie van de besmette site (bestanden en database), bewaar die buiten de server en geef haar een eenduidige naam. Die kopie is bedoeld voor analyse, nooit om terug te zetten.
Vraag je hostingprovider daarna om de webtoegangslogs en de inlogsporen van FTP, SFTP of SSH. Naast de wijzigingsdatums van de bestanden laten ze vaak zien wanneer en hoe de indringer binnenkwam: een verouderde plug-in, een hergebruikt wachtwoord of het nooit verwijderde account van een vorig webbureau.
Vernieuw ten slotte alle geheimen vanaf een schoon apparaat: hostingpaneel, FTP, database, WordPress-accounts en de e-mailadressen die aan de site zijn gekoppeld. Een aanvaller die je inbox nog kan lezen, kan die wachtwoorden anders buiten je medeweten opnieuw instellen.
Diagnose met WP-CLI: wat de controlesommen laten zien
Met SSH-toegang geeft WP-CLI, de officiële opdrachtregeltool van WordPress, een eerste betrouwbare stand van zaken. Volgens de documentatie van WP-CLI vergelijkt de kerncontrole elk geïnstalleerd bestand met de controlesommen die WordPress.org voor jouw versie publiceert.
wp core verify-checksums --include-root
wp plugin verify-checksums --all
wp user list --role=administrator
wp cron event list
De optie --include-root breidt de controle uit naar vreemde bestanden in de hoofdmap. Plug-ins uit de directory van WordPress.org worden vergeleken met hun officiële versie. Een premiumplug-in of maatwerk valt buiten deze test en moet je opnieuw downloaden bij de maker of nalezen.
De laatste twee regels tonen de beheerdersaccounts en de cron-events. Een beheerder die niemand herkent of een event met een onlogische naam pak je aan vóór je iets opnieuw installeert, anders veroorzaakt het hetzelfde probleem opnieuw.
Zes plekken waar kwaadaardige code overleeft
De controlesommen negeren de media, de configuratie en de ‘must-use’-plug-ins. Juist dat zijn de favoriete plekken van aanvallers om na een oppervlakkige schoonmaak terug te komen.

| Plek om te controleren | Veelvoorkomend symptoom | Aanbevolen controle |
|---|---|---|
| Map wp-content/uploads | PHP-script met de naam van een afbeelding of cachebestand | PHP-bestanden opsporen: daar hoort er geen enkel te staan |
| Elk .htaccess-bestand | Herschrijfregel naar een verborgen script of extern domein | Vergelijken met het standaardblok van WordPress, map voor map |
| wp-config.php | Onbekende include-regel of code helemaal bovenaan | Volledig nalezen en alleen herkenbare instellingen behouden |
| wp-content/mu-plugins | Actieve plug-in die niet in de gewone lijst staat | De map openen en elk bestand kunnen verantwoorden |
| Hoofdthema en childthema | Toevoegingen in functions.php, header.php of footer.php | Vergelijken met het originele archief van de maker |
| Cron-events | Taak die de malware elke nacht terugzet | Lijst via WP-CLI, onbekende hooks verwijderen |
find wp-content/uploads -type f -name "*.php"
Volgens de WordPress-documentatie worden bestanden in wp-content/mu-plugins automatisch geladen, kunnen ze niet vanuit het beheer worden uitgeschakeld en tonen ze geen updatemeldingen. Een ideale schuilplaats voor wie onopgemerkt wil blijven.
Let in die bestanden op lange, onleesbare tekenreeksen in combinatie met base64_decode, eval of gzinflate. Die functies hebben ook legitieme toepassingen: zet het bestand in quarantaine in plaats van het te verwijderen zonder te begrijpen wat het doet.
De database opschonen zonder de site te breken
Schone bestanden zijn niet genoeg als de database de code opnieuw injecteert. Controleer in de tabel wp_options of siteurl en home precies overeenkomen met je domein en of geen enkele optie een extern script laadt.
Neem daarna wp_posts onder de loep: script- of iframe-tags en links naar casino’s, onlineapotheken of pagina’s met Japanse tekens. Op een meertalige site, bijvoorbeeld in het Nederlands, Engels en Duits, controleer je elke taalversie, want soms is maar één taal getroffen.
Noteer bij verdachte gebruikersaccounts eerst de aanmaakdatum voordat je ze verwijdert: die helpt om de inbraak te dateren. Controleer ook het gekoppelde e-mailadres en de inhoud die het account heeft gemaakt.
De site opnieuw opbouwen op een schoon fundament
Is de inventaris rond, dan vervang je liever dan dat je bestand voor bestand repareert. De volgorde is belangrijk: elke stap gaat ervan uit dat de vorige schoon is.
- Kern: overschrijf wp-admin en wp-includes met een officiële kopie van WordPress.org, in de geïnstalleerde versie.
- Plug-ins: verwijder elke map en installeer opnieuw vanaf WordPress.org of de maker, nooit met een ‘nulled’ versie.
- Thema: installeer het originele hoofdthema opnieuw en lees het childthema regel voor regel na.
- Overbodige onderdelen: verwijder uitgeschakelde thema’s en plug-ins, oude kopieën van de site en vergeten testmappen.
- Beveiligingssleutels: genereer nieuwe salts met
wp config shuffle-salts, zodat alle sessies worden gesloten, ook die van de indringer. - Eindcontrole: voer de WP-CLI-controles opnieuw uit en test de site in een privévenster, op mobiel en in elke taal.
Laat je team weten dat iedereen opnieuw moet inloggen. Is de site te oud of te veel in elkaar geknutseld voor een betrouwbare herinstallatie, dan kost een nieuwe WordPress-site laten maken soms minder moeite dan steeds opnieuw opschonen.
Dicht daarna het lek: updates van de kern, plug-ins, het thema en PHP, tweestapsverificatie en define( 'DISALLOW_FILE_EDIT', true ); in wp-config.php. Gebruik je nog een PHP-versie die geen beveiligingsupdates meer krijgt, plan de overstap dan meteen in.
AVG en meldplicht: vergeet deze stappen niet
Verzamelt de site persoonsgegevens (contactformulier, reserveringen, een ledenomgeving of bestellingen), dan geldt de AVG. Artikel 33 schrijft voor dat je een datalek zo mogelijk binnen 72 uur na ontdekking meldt bij de Autoriteit Persoonsgegevens (AP), tenzij het waarschijnlijk geen risico oplevert voor de betrokkenen.
Bij een hoog risico moet je volgens artikel 34 ook de betrokkenen zelf informeren, en elk datalek leg je vast in een intern register. De AP ontvangt meldingen via haar online meldloket. Deze gids is geen juridisch advies.
Bij schade of afpersing kun je daarnaast aangifte doen bij de politie. Bewaar de besmette kopie en je aantekeningen: die heb je daarvoor nodig.
Een klus op afstand, via videogesprekken
Voor het opschonen van een besmette WordPress-site hoeft niemand te reizen: alles verloopt via videogesprekken en gedelegeerde toegang. In een kick-offgesprek zetten we de benodigde toegang op een rij, bepalen we wat als bewijs bewaard moet blijven en verdelen we de taken met je hostingprovider.
Daarna volgt de opschoning via schermdeling als je elke stap wilt volgen, of zelfstandig met tijdelijke toegang die je achteraf intrekt. Je ontvangt een rapport van de verwijderde bestanden, de verwijderde accounts en het meest waarschijnlijke lek.
Een opgenomen training laat je team daarna zien hoe het moet handelen, en een maandelijks overleg kan updates en back-ups bewaken. Op onze pagina over het herstel van een gehackte WordPress-website lees je hoe dat in de praktijk werkt.
Malware verwijderen uit WordPress: veelgestelde vragen
Is de back-up van gisteren terugzetten niet genoeg?
Zelden. Kwaadaardige code kan weken sluimeren voordat ze actief wordt, en dan zit dezelfde achterdeur ook in de back-up van gisteren. Zelfs met een kopie van vóór de inbraak blijft het oorspronkelijke lek open en blijven gestolen inloggegevens geldig. Terugzetten heeft pas zin als je de aanval hebt gedateerd, het lek hebt gedicht en alle toegang hebt gewijzigd.
Kan mijn hostingprovider het voor me regelen?
Sommige hostingproviders scannen bestanden of zetten een besmette site offline om hun andere klanten te beschermen, maar de WordPress-inhoud valt meestal onder jouw verantwoordelijkheid. Vraag in elk geval om de logs, een back-up aan serverzijde en de lijst met recent gewijzigde bestanden. Daarmee wordt het opschonen veel gerichter.
Kan een beveiligingsplug-in een virus zelfstandig verwijderen?
Zo’n plug-in herkent bekende signaturen, maar niet altijd nieuwe code, een script in de database of een beheerder die legitiem lijkt. Voor een blijvende oplossing combineer je een scanner met de controlesommen van WP-CLI, het nalopen van de gevoelige plekken en een schone herinstallatie. Daarna dient de plug-in als bewakingstool, niet als complete oplossing.
Moet ik een besmetting melden bij de Autoriteit Persoonsgegevens?
Dat hangt af van de gegevens die zijn blootgesteld. Kon de indringer bij persoonsgegevens en is een risico voor de betrokkenen niet uit te sluiten, dan schrijft de AVG een melding binnen 72 uur voor. Een eenvoudige bedrijfssite zonder formulier of klantaccounts heeft een ander profiel dan een webwinkel. Laat je over jouw situatie adviseren.
Waar kan ik terecht voor advies of aangifte?
Het Digital Trust Center van de Rijksoverheid publiceert praktische beveiligingsadviezen voor ondernemers. Lijd je financiële schade of wordt er losgeld gevraagd, dan is aangifte bij de politie een aparte stap. Bewaar de besmette kopie en je aantekeningen voor beide.
Waarom raakt de site na elke opschoning opnieuw besmet?
Bijna altijd omdat er iets aan de inventaris is ontsnapt: een script in de media, een must-use-bestand, een cron-taak, een beheerdersaccount of een ongewijzigd FTP-wachtwoord. Ook het oorspronkelijke lek, vaak een plug-in die niet is bijgewerkt, kan nog openstaan. Wil je herbesmetting voorkomen, dan gaat de volledige inventaris vóór de herinstallatie.
Er staan meerdere sites op mijn hostingaccount: wat nu?
Behandel ze als één incident. Op hetzelfde hostingaccount verspreidt malware zich makkelijk van de ene installatie naar de andere, bijvoorbeeld van je hoofdsite naar een vergeten testversie. Verwijder installaties die je niet meer gebruikt, schoon de andere tegelijk op en geef elke database een eigen wachtwoord.
Twijfel je over de staat van je site? Start een gratis beveiligingsscan van je WordPress-site:
Duikt er steeds weer kwaadaardige code op? Référenceur is een online marketingbureau uit België en Luxemburg met Nederlandse teksten en rapporten van native speakers: vraag een gratis analyse aan, dan nemen we samen de symptomen, de beschikbare toegang en het juiste opschoonprotocol voor jouw installatie door.