Een mailtje op zaterdagavond, “WordPress website gehackt, wat nu?”, en dan begint niet de opschoning, maar het eerste uur triage. De ondernemer aan de andere kant heeft net gezien dat zijn site opeens Russische teksten toont. Of dat Google een rode waarschuwing geeft. Of dat de hosting hem heeft afgesloten zonder uitleg.
In dat eerste uur is alles wat je doet bepalend voor hoeveel werk de rest gaat kosten. En tegelijk doet bijna iedereen meteen het verkeerde: opruimen, herinstalleren, plugins verwijderen. Dat is de fase ná triage, niet de eerste stap. Ik leg uit wat dan wél eerst moet.

WordPress website gehackt, wat nu in het allereerste uur
Stop met klikken. Dat is de moeilijkste eerste stap. De verleiding is groot om in WordPress in te duiken, plugins na te kijken, instellingen aan te passen. Maar elke klik kan bewijs vernietigen of de malware activeren.
Het eerste uur kent drie fases: afsluiten, bewijzen, communiceren. In die volgorde. Pas daarna komt de cleanup, en die loopt meestal over dagen of een week, niet uren.
Afsluiten betekent: de site offline of in maintenance-modus zetten zodat bezoekers (en zoekmachines) niet meer met de besmette versie in aanraking komen. Bewijzen betekent: vastleggen wat je nu ziet, voordat je iets verandert. Communiceren betekent: hoster bellen, betrokkenen informeren als dat moet, en pas daarna besluiten wie het opschoonwerk gaat doen.
Eerst afsluiten: site offline of PHP uitschakelen
Bij actieve malware draait er PHP-code die zichzelf kan herstellen. Verwijder je een geïnfecteerd bestand, dan zet de code het terug zodra een bezoeker (of jijzelf in admin) een pagina opvraagt. Daarom: eerst afsluiten, dan pas iets aanraken.
Drie manieren, in volgorde van voorkeur:
Hosting-paneel toggle. Veel hosters hebben een “site offline” of “maintenance mode” knop. Eén klik en je site is niet meer bereikbaar voor bezoekers, ook niet voor het script zelf.
.htaccess deny from all. Voeg in de root van je site een .htaccess toe die alles blokkeert behalve jouw IP. Daarmee kun je zelf nog kijken, maar bezoekers en bots niet meer.
PHP-handler uitschakelen. Via de hosting kun je PHP soms uitzetten op de docroot. Dat is de hardste variant: niets draait nog, geen kans dat malware zichzelf onderhoudt.
Wat je níét moet doen: een back-up terugzetten als eerste actie. Daarmee verwijder je bewijs en mogelijk ook het entry-point dat de hack heeft mogelijk gemaakt. Een back-up is later een optie, niet nu.
Bewijs vastleggen vóór je iets weggooit
In mijn ervaring is dit de stap die het vaakst overgeslagen wordt, en die je later het meeste pijn doet. Voor je iets verandert: leg de huidige staat vast.
Maak screenshots van wat je ziet. De voorpagina, de admin, eventuele meldingen van Google of de hoster. Datum en tijd zichtbaar in beeld. Bewaar ze ergens veilig buiten de gehackte server.
Maak een “vies” snapshot van de site. Een FTP/SFTP-download van de hele site-folder, een database-export via phpMyAdmin of de hosting-tool. Ja, die kopie bevat de malware. Dat is precies waarom je hem maakt: forensiek heeft die nodig om te begrijpen hoe binnen is gekomen.
Vraag de hoster om server access-logs van minstens de laatste 14 dagen. Veel hosters bewaren slechts 7 of 14 dagen aan logs. Als je wacht met vragen, ben je dat venster mogelijk al kwijt. Die logs bevatten welke IP’s wat hebben opgehaald, en zijn vaak waar je het entry-point ziet: een verdachte POST naar wp-admin/admin-ajax.php, een bestand dat plots verschijnt in wp-content/uploads.
Vergelijk de file-mtimes (last-modified datums) van je site-bestanden met je laatste schone back-up. Bestanden die recent gewijzigd zijn zonder dat jij iets hebt gedaan: verdacht.

Wachtwoorden in de juiste volgorde resetten
Een wachtwoord resetten lijkt eenvoudig, maar de volgorde is belangrijk. Als je begint bij WordPress-admin terwijl je hosting-account nog gehackt is, draait de aanvaller hem zo weer terug.
De juiste volgorde, van hoog naar laag privilege:
- Hostingaccount. Hoogste niveau, alles staat hieronder. Tweefactor aanzetten als dat nog niet zo is.
- Database-user(s). Pas op: na het wijzigen van het databasewachtwoord moet je het ook in
wp-config.phpupdaten, anders is je site dood. - WordPress admin-accounts. Alle accounts met admin-rechten, niet alleen jouw eigen.
- FTP/SFTP-accounts. Zeker als je in de logs verdachte FTP-logins ziet.
- Mailboxen op hetzelfde domein. Aanvallers gebruiken die vaak om reset-mails op te vangen.
Vergeet niet je e-mailadres dat aan WordPress hangt. Als de aanvaller dat heeft gewijzigd, krijg je geen reset-link binnen. In dat geval reset je het wachtwoord direct in de database via phpMyAdmin met wp_set_password.
Klanten en bezoekers informeren
Niet elke hack is een datalek. Een gedefacede homepage met een spam-banner: vervelend, geen meldplicht. Een hack waarbij klantgegevens, wachtwoorden of betaalgegevens mogelijk zijn ingezien: wel.
Bij een vermoedelijk datalek geldt sinds de AVG een 72-uurs meldplicht bij de Autoriteit Persoonsgegevens. Die 72 uur begint zodra je het lek redelijkerwijs had moeten weten, niet vanaf het moment dat het is opgelost. Bij twijfel: melden, of laat dat door een jurist of de AP zelf beoordelen.
Communicatie naar klanten: kort en feitelijk. Wat is er gebeurd (algemeen, geen technische details die de aanvaller helpen), wat heb je gedaan, wat moeten zij doen (wachtwoord wijzigen bijvoorbeeld), waar kunnen ze vragen stellen. Geen valse geruststelling (“alles is veilig”) en geen paniek-toon. Eén mail, helder, één keer.
Wat je níét communiceert: welke kwetsbaarheid is misbruikt, welke plugin de oorzaak was, welke server-software draait. Die informatie is brandstof voor herhaling.
Wanneer je hulp belt en wat je dan aanlevert
Veel mensen wachten te lang met hulp inroepen. Pas na een halve dag zelf modderen, als de paniek is omgeslagen in uitputting. Sneller bellen scheelt uren werk.
Als je mij belt of mailt over een gehackte site, dan helpt het als je dit direct meestuurt:
- de exacte URL en wat je ziet (screenshots)
- naam van de hoster en het type pakket (shared, VPS, managed)
- of je nog admin-toegang hebt
- of je nog FTP/SFTP-toegang hebt
- wanneer je de hack ontdekte en of er iets is gewijzigd sinds dat moment
- of je een back-up hebt en hoe recent die is
- of er klantgegevens of betaalgegevens op de site staan
Met die info kan ik binnen 15 minuten zeggen wat het waarschijnlijk wordt. Acute hack-cleanup valt onder mijn spoedtarief van 95 euro per uur, voor avond en weekend wordt dat 105 euro per uur. Hacks gebeuren zelden op een dinsdagochtend, dus dat tweede tarief is geen uitzondering. Een gemiddelde cleanup zit tussen drie en acht uur, afhankelijk van hoeveel forensiek nodig is en hoe diep de besmetting zit.
Voor lokale ondernemers in Zeeuws-Vlaanderen ben ik een direct aanspreekpunt in Terneuzen. Het kan helpen om te weten dat aan de andere kant van de mail iemand zit die dit eerder heeft gedaan en niet bij elke melding paniek voelt.

Triage versus opschoning: waarom dat twee aparte fases zijn
Triage duurt ongeveer een uur. Opschoning duurt dagen.
In de triage-fase doe je niets onomkeerbaars. Je sluit af, je legt vast, je beveiligt accounts, je informeert wie geïnformeerd moet worden. Aan het eind van dat eerste uur weet je: hoe groot het probleem is, wie er verder bij moet, en wat de volgende 48 uur gaat gebeuren.
In de opschoning-fase wordt het werk gedaan: malware verwijderen, root-cause analyseren, een schone versie terugzetten of de bestaande versie opschonen, hardening om herhaling te voorkomen. Een schone restore zónder root-cause-analyse leidt in mijn ervaring in 60 tot 80 procent van de gevallen tot herinfectie binnen 30 dagen. Het entry-point dichtmaken is geen luxe; zonder dat sta je over een maand op dezelfde plek.
Het opschoning- en verhuizingsstappenplan volgt zodra de triage klaar is. Voor nu: focus op het eerste uur, niet op de daarna.
Het principe geldt overigens niet alleen voor WordPress. Voor Joomla, Drupal en Laravel-sites is de triage-volgorde identiek. De stack-specifieke verschillen zitten in de paden (Joomla heeft eigen .htaccess-locaties, Drupal heeft update.php als entrypoint, Laravel heeft de .env-file als kritieke plek), maar het principe blijft: eerst afsluiten, dan bewijzen, dan communiceren, dan pas opschonen.



