Helaas komt het regelmatig voor dat WordPress websites gehackt worden. In dit artikel vertellen we je hoe je een hack (malware) kan herkennen en hoe je je website weer kan opschonen.

Hoe weet ik dat mijn WordPress website is gehackt?

  • Website vertoond rare teksten en links die jij niet zelf hebt geplaatst
  • Website wordt doorgesluisd naar een andere website (redirect)
  • Het verkeer op je website daalt, doordat Google jouw website niet meer toont in de zoekresultaten
  • Je krijgt de melding van je hostingprovider dat er spam verstuurd wordt vanaf jouw website

Allemaal erg vervelend. Mensen vinden niet wat ze zoeken en het komt niet bepaald professioneel over.

Waarom worden websites gehackt?

Hackers proberen meestal geld te verdienen door websites te hacken. Ze versturen spam vanuit jouw website of linken door naar hun eigen, vaak anonieme website om daar veel meer verkeer te ontvangen. Vaak gaat hier om gokwebsites of pornografische websites. Door links naar hun eigen website op jouw site (en vele anderen) te plaatsen wordt Google gemanipuleerd. Doordat er veel links van betrouwbare sites zijn kan de website waar naartoe wordt gelinkt hoger in de zoekresultaten komen.

Gehackte WordPress website repareren - website gehackt

Hoe komt het dat mijn WordPress website gehackt is?

Dat je website gehackt is, kan meerdere oorzaken hebben:

  1. Het niet op tijd doorvoeren van beveiligingsupdates
  2. Het gebruik van simpele of reeds gestolen wachtwoorden
  3. Het gebruik van plugins die niet meer worden onderhouden
  4. Het gebruik van plugins die niet uit de WordPress.org repository komen
  5. Er is ingebroken op de server

Deze punten geven al een beetje aan wat er nodig is: code die is geupdate en vertrouwd is.

Laten we aan de slag gaan om jouw WordPress website te repareren!

Let op! Het repareren van een gehackte WordPress website is een complex proces, hieronder lees je hoe je dit doet.
Hulp nodig? Laat ons jouw WordPress website repareren!

1. Maak een backup van alle bestanden en de database

Het is belangrijk om een backup te maken van alle bestanden en de database. Vaak kan je dit geautomatiseerd doen binnen het control panel van jouw hostingprovider. Hier rechts is een voorbeeld van waar je dit kan vinden binnen een cPanel control panel.

Binnen cPanel is het mogelijk om op deze plek zowel de bestanden als de database te backuppen. Voor sommige providers is het echter nodig om voor de database een afzonderlijke backup te maken.

Dit kan je dan doen door naar phpMyAdmin te gaan en daar te klikken op Export -> Quick -> Go
Vervolgens zal je database backup worden gegenereerd en gedownload.

2. Zorg dat de website niet meer te benaderen is van buitenaf

Om te voorkomen dat de website opnieuw geïnfecteerd wordt met malware tijdens het opschonen van de website is het belangrijk dat deze niet meer te benaderen is door anderen. Er zijn verschillende manieren om hier voor te zorgen, vaak kan je dit doen door een wachtwoord te zetten op de website binnen het control panel (zie voorbeeld cPanel hier rechts)

Een andere manier is het dichten van de website doormiddel van een ip-blokkade.

Je kan dit bereiken door het .htaccess bestand aan te passen. Dit bestand vind je in de hoofdmap (root directory) van de website. Meestal is dit public_html of www.

In dit .htaccess bestand zet je de volgende regels helemaal bovenaan de file. Je vervangt: “192.178.123.178” voor jouw ip-adres. Je kan hier je ip-adres vinden.

order deny,allow
deny from all
allow from 192.178.123.178

Nadat je dit hebt ingesteld, is de website beveiligd en weet je zeker dat er niemand van buitenaf wijzigingen doorvoert op je website.

3. WordPress bestanden opnieuw installeren

Om er zeker van te zijn dat we met een schone installatie starten, gaan we beginnen met het overschrijven van de huidige WordPress installatie.

We zullen eerst de laatste versie van WordPress downloaden.

Als je dit bestand gedownload hebt, kan je de zip-file uitpakken.

Vervolgens open je een FTP client zoals Filezilla. Hiermee dien je in te loggen op je server en daar naar de root directory te gaan. Hier zie je een aantal bestanden en de mapjes wp-includes, wp-content en wp-admin.

De mappen wp-includes, wp-admin en alle bestanden (met uitzondering van wp-config.php en .htaccess mag je nu verwijderen. Hierin staan de standaard WordPress files die we zometeen gaan uploaden. Let er bij het verwijderen op dat je geen bestanden verwijderd die je zelf specifiek hebt toegevoegd in de root directory!

Als alle bestanden en mappen verwijderd zijn, kan je de mappen wp-includes, wp-admin en alle losse bestanden uit je verse WordPress installatie uploaden.

Hierna kunnen we de bestanden .htaccess en wp-config.php bekijken om te zien of hier nog wijzigingen zijn aangebracht.

Alle code tussen “Begin WordPress” en “End WordPress” is standaard en zou er zo uit moeten zien:

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Verder staat in dit bestand misschien nog de code die wij eerder geplaatst hebben om de toegang te dichten voor bezoekers. Als je nog andere code ziet staan die je niet vertrouwd, laat dan een WordPress expert meekijken.

Nu bekijken we de file wp-config.php. Je kan deze file vergelijken met de file wp-config-sample.php.

Staan hier rare zaken in?

Als eerste staan hier define commando’s – instellingen van de WordPress installatie. Controleer deze.

Het is niet raar als je rare tekens ziet staan bij

* Authentication Unique Keys and Salts.

Deze zinnen zorgen ervoor dat de sessies van gebruikers gecodeerd zijn. Ja kan deze zinnen een beetje aanpassen om er zeker van te zijn dat er niemand meer is ingelogd.

Als laatste staan de table_prefix, de wp_debug en het pad naar de WordPress directory wat er zo uitziet:

/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
   define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}

/** Sets up WordPress vars and included files. */
require_once( ABSPATH . 'wp-settings.php' );

Als er verder geen rare zaken in deze file staan, kunnen we deze zo laten.

Nu we er zeker van zijn dat de WordPress installatie niet meer corrupt is, kunnen we verder met de volgende stap.

Wordpress website op maat laten maken door Webconstructions Delft

4. wp-content map opschonen

De volgende stap is het opschonen van alle overige bestanden. Dit kan aardig wat werk zijn, afhankelijk van de grootte van je website.

Vervang allereerst het bestand index.php met het bestand in je nieuw gedownloade WordPress installatie folder. Doe dat ook met de index.php files in de mappen themes en plugins.

Mocht er in de map wp-content een folder staan met ‘cache’ in de titel, dan kan je deze gerust verwijderen, de caching wordt later automatisch opnieuw opgebouwd.

Ook alle bestanden in de map upgrade kunnen verwijderd worden. Hierin worden alleen bestanden gezet tijdens een upgrade van WordPress.

In de map languages en de submappen die hierin staan horen alleen .mo, .po en .json te staan. Verwijder alle overige bestanden!

Uploads

In de map uploads en alle submappen vind je alle bestanden terug die je hebt geupload via de mediabibliotheek in WordPress. Dit kunnen plaatjes, filmpjes en documenten zijn. Bestanden met de extensies: php, asp en exe horen hier niet thuis! Verwijder ze dan ook meteen! Het kan even wat werk zijn om alle mappen te doorlopen, maar het is heel belangrijk dat dit gebeurd. Sommige FTP programma’s hebben ook de mogelijkheid om op de bestandsextensie te zoeken, dit kan je wat werk schelen hier.

Plugins

In de map plugins vind je alle plugins terug die zijn geupload. Ook als deze niet meer actief zijn, komen ze hier terug. Het is een mooi moment om ook alle plugins te verwijderen die je niet meer gebruikt.

Van de plugins die je nog wel gebruikt, gaan we de files downloaden van https://wordpress.org/plugins/ Hier kan je de plugins opzoeken en een zip-bestand met de bestanden downloaden. Verwijder eerst de plugin files voordat je de nieuwe files upload, zo blijven er geen gevaarlijke bestanden achter.

Mocht je nog betaalde plugins hebben, zorg er dan voor dat je licenties op orde zijn en je de laatste versie download van de ontwikkelaar van de plugin. Ook hier geldt weer: verwijder eerst de oude bestanden alvorens je de nieuwe bestanden upload.

Mocht je plugins tegenkomen die je niet kan terugvinden bij een ontwikkelaar of wordpress.org, verwijder ze dan: het kan hier namelijk gaan om gevaarlijke bestanden die je installatie kunnen schaden.

Soms is er ook een map mu-plugins terug te vinden in de wp-content folder. In dat geval gaat om zogenaamde ‘must-use’ plugins die door een hostingprovider zijn geplaatst. Vraag in dat geval aan je hostingprovider om de mappen in de mu-plugins folder te overschrijven.

Thema’s

In de map themes vinden we de geïnstalleerde thema’s terug. Ook hier is het goed om ongebruikte thema’s te verwijderen. Voor thema’s die wel gebruikt worden is het goed om deze opnieuw te downloaden van de ontwikkelaar. Wederom eerst de oude bestanden verwijderen voordat je de nieuwe upload.

Het zou kunnen zijn dat er maatwerk is uitgevoerd aan de thema’s of dat er zelfs een maatwerk thema is geinstalleerd. Neem in dat geval contact op met de ontwikkelaar om hem te vragen of er nog een backup van de originele bestanden beschikbaar is om dit thema te overschrijven.

Overige mappen

Het kan voorkomen dat er nog andere mappen binnen de map wp-content staat. Doorloop in dat geval de verschillende bestanden en neem indien nodig contact op met een professional om dit voor je te doen.

5. Database opschonen

Nu de bestanden op orde zijn, is het goed om te kijken naar de database. Login via phpMyAdmin op de database of als dat niet mogelijk is, gebruik een ander database analyse programma als Adminer.

Als je bent ingelogd kan je de database bekijken. (Mocht hier een map met database_schema staan, dan kan je die negeren). Binnen de database zie je alle tabellen staan met dezelfde table_prefix staan als die je hebt gezien in wp-config.php, in veel gevallen “wp_”.

wp_options

Controleer in de tabel wp_options of “siteurl” en de “home” juist staan ingesteld, dus naar het pad van je website. Als je deze niet kan vinden kan je zoeken op deze termen onder “option_name”.

Zoek op gehackte content

Het kan zo zijn dat de content van je website is gehackt via de database. Wat hackers tegenwoordig vaak doen is een script laden binnen de content waarmee allerlei nare zaken worden uitgerold, zoals het doorsluizen van bezoekers naar een andere website. Wat hackers daarbij vaak doen, is het gecodeerd opslaan van een script, zodat deze niet makkelijk terug te vinden is in de database. Het is daarom goed om je hele database te doorzoeken op deze term: “String.fromCharCode”. Als je resultaten krijgt voor deze zoekterm, betekend dit dat je database besmet is. Als dat het geval is, kan je een export maken voor de tabel waarbij dit het geval is. Je kan de tabel als .sql file downloaden en bewerken met een editor. Zoek hierbinnen weer op de term “String.fromCharCode” en verwijder alle scripts die rondom deze code staan. Als je de tabel helemaal hebt opgeschoond, kan je weer terug gaan naar je database. Hier ga je naar het overzicht en verwijder je in de tabellenstructuur, de tabel waar het hier om gaat (meestal wp_options of wp_posts), vervolgens importeer je jouw opgeschoonde tabel door naar import te gaan.  Gebruikers zullen niet langer last hebben van dit script.

wp_users

In de tabel wp_users kan je alle gebruikers terugvinden die toegang hebben tot de website.

Controleer of alle gebruikers die in deze tabel staan correct zijn. Het kan zo zijn dat een hacker hier nieuwe gebruikers heeft aangemaakt. Controleer ook of de email-adressen die aan de gebruikers zijn gekoppeld, de juiste zijn. Als een hacker deze heeft gewijzigd naar zijn eigen email adres kan hij via een “wachtwoord vergeten” knop alsnog toegang krijgen tot de WordPress installatie.

Als je alles hebt gecontroleerd is het tijd om de wachtwoorden van de gebruikers te gaan resetten. Hiermee voorkom je dat een hacker die de oude wachtwoorden heeft opgeslagen opnieuw kan binnenkomen.

Hoe repareer ik een gehackte WordPress site? - Hoe repareer ik een gehackte WordPress site

6. Nieuwe wachtwoorden instellen

We beginnen met het resetten van de wachtwoorden van de gebruikers. Hiervoor dienen we in te loggen in de achterkant van WordPress (standaard /wp-admin of /login).

Het zou kunnen zijn dat je hier de melding krijgt dat de database moet worden bijgwerkt, dat klopt, we hebben immers allerlei updates doorgevoerd. Klik op “WordPress database bijwerken” en wacht tot de pagina geladen is.

Hierna gaan we naar gebruikers en verwijderen we alle gebruikers die hier niet thuishoren. Voor alle andere gebruikers resetten we de wachtwoorden hier. Kies voor een ingewikkeld wachtwoord, WordPress kan dit voor je genereren. Sla het wachtwoord op op een veilige plek en doe dit voor alle gebruikers.

Wachtwoord Database gebruiker wijzigen

Er is een grote kans dat de hackers toegang hebben gehad tot de file wp-config.php en zo de gebruikersnaam en het wachtwoord van de database hebben buitgemaakt. Het is daarom raadzaam om het wachtwoord van deze database gebruiker te vervangen. Dit kan je weer doen binnen het control panel van jouw hostingprovider.

Binnen het cPanel voorbeeld dat je hier rechts ziet, ga je naar MySQL Databases en scroll je daar helemaal naar beneden voor de database gebruikers. Hier kan je het wachtwoord veranderen.

Vergeet niet om nadat je het wachtwoord van je database gebruiker hebt gewijzigd om dit nieuwe wachtwoord ook in wp-config.php aan te passen.

FTP gebruiker veranderen

Wij raden u ook aan om de FTP gebruiker te veranderen, of hiervan het wachtwoord te wijzigen. Mocht er in het verleden ooit iemand toegang hebben gehad, die dit niet meer zou moeten hebben, dan is de mogelijkheid dat zo’n persoon schade aanricht ook uitgesloten. In het voorbeeld zie je waar je de FTP accounts van gebruikers kan vinden in cPanel. Verwijder oude gebruikers en pas verder alle wachtwoorden aan.

7. Website heropenen

Nu de website weer vrij is van malware, kunt u de website weer openstellen voor publiek. Verwijder de ingestelde ip-blokkade in het .htaccess bestand of herstel de instellingen bij uw hostingprovider.

Uiteraard is het belangrijk om de website meteen goed te testen. Doorloop de website daarom altijd even in een incognito venster.

Het zou kunnen zijn dat Google je website op een blacklist heeft gezet. Dit kan je controleren bij Google Transparency Report

Als je Google Search Console hebt, kan hier ook zijn aangegeven dat de website malware bevatte. Je kan hier aangeven dat de problemen zijn opgelost.

Hoe repareer ik een gehackte WordPress site? - Hoe repareer ik een gehackte WordPress site

Hoe zorg ik ervoor dat ik niet meer gehackt wordt?

Nu je website is opgeschoond is het belangrijk om maatregelen te treffen zodat dit niet nog een keer gebeurt.

Wat kan je doen om je website zo goed mogelijk te beveiligen?

Er zijn diverse manieren om je WordPress website beter te beveiligen o.a. door:

Beveiligingsplugins

Wij raden je aan om een van deze beveiligingsplugins te installeren:

WordFence – Firewall en actief scannen van code binnen WordPress, het thema en de plugins. Je kan mailtjes krijgen met tips om jouw website beveiliging te verbeteren.

Sucuri Security – Een alternatieve plugin om je website beter te beveiligen en actief te scannen op malware.

iThemes Security – Een plugin die optreed als firewall en actief scant op verouderde en onveilige plugins.

Updates en onderhoud

De belangrijkste manier om je WordPress veilig te houden, is om je WordPress installatie up-to-date te houden! Als je de verschillende onderdelen van je WordPress website niet update, kunnen hackers makkelijk toeslaan in de kwetsbaarheden die je website heeft.

Hackers worden steeds slimmer en weten de kleinste gaten in de beveiliging uit te buiten. Dit is ook de reden dat de ontwikkelaars van WordPress zeer regelmatig beveiligingsupdates uitbrengen zodat deze gaten gedicht worden. Zorg er daarom altijd voor dat alle onderdelen van de website geupdate worden naar de laatste versie.

Dit betekent natuurlijk wel dat er op regelmatige basis actie vereist is. Webconstructions Delft neemt deze inspanning graag uit handen. Lees hier meer over de mogelijkheden voor onderhoud en hosting.

Laat ons jouw gehackte WordPress website repareren

Laat je het opschonen van jouw WordPress website liever aan ons over?

Neem contact op.