
Je site stuurt bezoekers door naar vreemde webshops, je host meldt een infectie of Chrome toont een rode waarschuwing. Malware verwijderen uit WordPress bestaat uit vijf stappen: site isoleren, bestanden en database scannen, geïnfecteerde bestanden vervangen door schone core- en pluginversies, achterdeurtjes en verborgen gebruikers verwijderen en de oorzaak dichten met updates en een firewall. Hoe je een hack herkent en wat je in het eerste uur doet, lees je in WordPress website gehackt, wat nu?. Hier gaat het om het herstel zelf.
Wat malware doet en waarom een back-up terugzetten niet genoeg is
Malware is schadelijke code die een aanvaller in de bestanden of de database van je site heeft geplaatst. Meestal merk je dat aan doorverwijzingen naar spam, aan pagina’s in Google die je zelf nooit hebt gemaakt, of aan een achterdeur (backdoor) waarmee de aanvaller later ongemerkt terugkomt. Wat het lastig maakt, is dat veel malware zich verbergt voor ingelogde beheerders. Jij ziet een normale site, terwijl een bezoeker uit Google wordt doorgestuurd.
Een back-up terugzetten verwijdert de malware, maar niet het lek waardoor die binnenkwam. Dat is de grootste denkfout die ik tegenkom. Malware zit vaak al weken op een site voordat iemand het opmerkt, dus de back-up die je terugzet kan net zo goed besmet zijn. En ook als hij schoon is, staat het lek er na het terugzetten weer. Het is alsof je het slot van je voordeur laat zitten nadat de inbreker een sleutel heeft bijgemaakt. Bij een webshop verlies je bovendien alle bestellingen en wijzigingen sinds die datum. Een schone back-up van vóór de infectie is wel een prima startpunt, zolang je daarna ook stap 4 en 5 uitvoert. Hoe terugzetten werkt, lees je in back-up terugzetten.
Stap 1 en 2: isoleer de site en scan bestanden en database
De eerste stap is voorkomen dat de schade groter wordt. Ik werk daarbij altijd in dezelfde volgorde.
- Zet de site in onderhoudsmodus of beperk de toegang.
- Maak een back-up van de besmette staat. Die zet je niet terug, maar bewaar je als bewijs en terugvalpunt.
- Wijzig alle wachtwoorden, dus van WordPress-beheerders, je hostingpaneel, FTP/SFTP en de database.
- Meld de besmetting bij je host, want die kan al bestanden in quarantaine hebben gezet.
- Scan de computers waarmee je inlogt. Een keylogger op je laptop maakt nieuwe wachtwoorden direct waardeloos.
Reset de site niet, want dan verdwijnt het bewijs dat je later nodig hebt om de oorzaak te vinden. Die back-up van de besmette staat is extra belangrijk als je later via JetBackup 5 in cPanel terugzet, omdat de huidige staat daarbij niet automatisch wordt bewaard.
Dan het scannen. Een malwarescan met een plugin als Wordfence, Sucuri of Jetpack Protect geeft een eerste beeld, en je host kan daarnaast serverzijdig scannen. Versleutelde code met functies als eval of base64_decode glipt er soms doorheen, dus vergelijk de core-bestanden ook met de officiële versie. Werk je met WP-CLI, dan doet wp core verify-checksums dat in één keer. Vergeet de database niet. Zoek in wp_options en wp_posts naar onbekende scripts en links, en loop pagina’s, berichten, reacties en revisies na op verborgen spamlinks.
Stap 3 en 4: vervang besmette bestanden en verwijder achterdeuren
Geïnfecteerde bestanden ga je niet repareren, je vervangt ze door schone versies. Installeer de WordPress-core opnieuw en verwijder plugins en thema’s om ze daarna vers uit de officiële bron te downloaden. Een update over besmette bestanden heen is niet genoeg, want een bestand dat de aanvaller zelf heeft toegevoegd, blijft dan staan. Kijk ook in wp-content/uploads. Daar horen afbeeldingen en documenten, geen PHP-bestanden, dus elk PHP-bestand op die plek mag weg. Loop tot slot .htaccess en wp-config.php na op regels die je niet herkent.
Daarna ga je op jacht naar achterdeuren en verborgen gebruikers, want daar zit het verschil tussen opruimen en echt herstellen. Malware maakt vaak een beheerdersaccount aan dat je niet ziet onder Gebruikers, dus controleer ook de tabellen wp_users en wp_usermeta in de database. Kijk in de map mu-plugins, want plugins daarin laden altijd en staan niet in je gewone pluginlijst, en controleer of er onbekende cron-taken draaien. Vernieuw vervolgens de security keys en salts in wp-config.php. Daarmee wordt iedereen uitgelogd, ook een aanvaller met een gestolen sessie. Scan daarna nog een keer.
Stap 5: vind en dicht de oorzaak
Een herstel zonder dat de oorzaak gevonden is, noem ik geen herstel. Zonder deze stap zie je dezelfde malware vaak binnen enkele dagen terug, omdat de aanvaller weer door dezelfde deur loopt. Begin bij de logs en recente wijzigingen. Op onze shared hosting vind je de toegangslogs in cPanel onder Raw Access, en elke nacht als .gz-bestand in de map /logs. PHP-fouten staan in een bestand error_log in de map waar de fout optreedt.
Met die informatie zoek je de ingang. Meestal is dat een verouderde plugin met een bekend lek, een zwak of gelekt wachtwoord, een nulled thema of een oude, vergeten installatie op hetzelfde hostingaccount. Hoe elk van die ingangen werkt, lees je in de zeven meest voorkomende oorzaken van een hack. Heb je de oorzaak gevonden, update dan alles, zet tweestapsverificatie (2FA) aan voor alle beheerders en zorg voor een firewall (WAF). Een firewall op serverniveau en malwarescans horen bij goede managed WordPress hosting standaard. Blokkeer na het herstel ook het uitvoeren van PHP in de map uploads, zodat een geüpload bestand daar geen code meer kan draaien. Voor de lange termijn lees je verder in WordPress-beveiliging en je WordPress-login beveiligen, of je laat updates en monitoring over aan WordPress onderhoud.
Zelf doen, terugzetten of laten doen?
Zelf opschonen kan bij een eenvoudige site met één duidelijke besmetting, maar bij een webshop met klantgegevens of een terugkerende infectie raad ik aan het uit te besteden.
| Route | Wanneer geschikt | Risico | Benodigde kennis |
|---|---|---|---|
| Zelf opschonen | Eenvoudige site, één duidelijke besmetting | Een achterdeur over het hoofd zien | Bestanden, database, hostingpaneel |
| Schone back-up terugzetten en oorzaak dichten | Infectiedatum bekend, weinig wijzigingen sindsdien. Op Surver shared hosting kosteloos via JetBackup 5 in cPanel, los voor bestanden of database | Back-up al besmet, lek blijft open | Terugzetten, liefst eerst op een staging-omgeving als je host dat ondersteunt |
| Uitbesteden (hackherstel) | Webshop, klantgegevens of terugkerende infectie | Kosten | Geen |
Zijn er mogelijk persoonsgegevens ingezien, kijk dan ook naar de meldplicht bij een datalek. Na het opschonen dien je in Google Search Console onder Beveiligingsproblemen een beoordelingsverzoek in en controleer je je domein in Google Safe Browsing. Hoe dat gaat, staat in Google-waarschuwing verwijderen.
Wat we bij Surver standaard doen, is de kans op zo’n herstel zo klein mogelijk maken. Op alle shared hostingpakketten draait een ModSecurity-firewall, en Imunify scant bij elke bestandswijziging en zet verdachte bestanden op slot, met daarnaast elke nacht een volledige serverscan. Is je site toch besmet, dan kun je het hele traject aan ons overlaten met WordPress gehackt herstel. We verwijderen malware, achterdeuren en spamlinks, dichten de oorzaak, installeren core, thema’s en plugins opnieuw en resetten de wachtwoorden. Daarna controleren we blacklists, dienen we het beoordelingsverzoek bij Google in en krijg je een verslag.
Veelgestelde vragen
Kan een beveiligingsplugin malware zelf verwijderen?
Deels. Een scanner vindt bekende patronen, maar mist vaak database-injecties en achterdeuren, en malware kan de plugin zelfs uitschakelen. Op Surver shared hosting scant Imunify al serverzijdig. Gebruik een plugin daarom als hulpmiddel, niet als enige stap.
Hoe lang duurt het verwijderen van malware?
Dat hangt af van hoe diep de infectie zit, en een grondige opschoning inclusief de oorzaak kost meer tijd dan een snelle scan. De meeste tijd zit in stap 4 en 5, want achterdeuren en de oorzaak vind je alleen met handwerk.
Kan malware mijn posities in Google schaden?
Ja, door spampagina’s, doorverwijzingen en een waarschuwing in de zoekresultaten. Na het opschonen herstelt dat meestal pas nadat Google je beoordelingsverzoek heeft afgehandeld.