Effectieve tips voor een veilige WordPress website – Deel 1
Wat zijn de kenmerken van een veilige website? Misschien denk je allereerst aan hackers die proberen toegang tot je site te krijgen. En klantdata moet natuurlijk altijd veilig zijn. Maar ook de beschikbaarheid van de website en de mogelijkheden om de site te herstellen als er toch iets ernstigs gebeurt behoren tot het gebied van veiligheid.
De WordPress basis-module wordt algemeen gezien als zeer veilige software. Maar software is helaas nooit 100% veilig en ook voor WordPress en de bijbehorende plug-ins worden regelmatig beveiligingsupdates uitgebracht. Vanwege de enorme populariteit (wereldwijd draaien meer dan 60% van alle websites met een CMS op WordPress) is het ook een van de meest actief aangevallen software.
Door een aantal stappen te nemen kan je echter het potentieel aanvalsoppervlak van je website zo klein mogelijk krijgen en hopelijk rustig slapen wetende dat je alles eraan hebt gedaan om je site te beschermen.
- Welk type hosting account
- Wat zijn ‘goede’ backups
- HTTPS & SSL certificaten
- Automatische patches
- DNS firewalls
- Schakel over op HTTPS
- Schakel niet gebruikte onderdelen uit
- Gebruik een beveiligingsplugin
- Beperk de rechten van gebruikers
- Gebruik geen ‘nulled’ plugins en thema’s
3. Beveilig je WordPress Admin omgeving
- Gebruik sterke wachtwoorden
- Gebruik 2-factor authenticatie
- Gebruik niet ‘admin’ als gebruikersnaam
- Gebruik een database prefix
- Ververs de security keys
- Voorkom brute force aanvallen
- Houdt bots buiten de deur
- Login URL wijzigen
- IP whitelisting
4. Update regelmatig WordPress, de thema’s en de plugins
- Hoe merk je dat je site gehackt is?
- Opschonen of backup terugzetten?
De webhosting provider
De veiligheid van je WordPress website begint helemaal bij de hosting van de website. Er zijn stuntende webhosters die een duizelingwekkend aanbod doen voor minder dan 1 euro per maand. Terwijl de meeste hostingproviders die algemeen gekenmerkt worden als “premium” eerder tussen de 5 en 15 euro per maand rekenen voor een standaard shared hosting pakket. Waar ligt het verschil dan en waar moet je op letten?
Welk type hosting account?
De meeste WordPress websites worden gehost op een Shared Hosting account waarbij je de webserver deelt met een aantal andere websites. Hoeveel andere websites dat zijn verschilt enorm per provider maar dit kan oplopen tot honderden sites per server. Hier schuilt meteen ook een deel van het probleem van eerder genoemde stuntende webhosters: zij zullen eerder de server ‘overboeken’ waardoor jouw site benadeeld kan worden in zijn prestaties als een andere site op dezelfde server ineens druk bezocht wordt, ondermaats geprogrammeerd is of aangevallen wordt.
Een groot voordeel van een Shared Hosting account is dat de hosting provider het beheer van de server hardware, besturingssysteem en server-software uitvoert en monitort. Daar heb je als klant geen omkijken naar.
Wil je meer performance en zekerheid, dan is een Managed Virtual Private Server waarschijnlijk de beste oplossing. Bij dit product deel je de webserver met niemand anders en staan alle gereserveerde resources volledig tot de beschikking van jouw website. Omdat het een virtuele server betreft ben je ook niet afhankelijk van storingen aan de onderliggende hardware. Let wel op het woordje ‘Managed’, dat geeft aan dat het systeembeheer van het besturingssysteem en de server-software door de hosting provider wordt uitgevoerd.
Wat zijn ‘goede’ backups?
Een verder punt van aandacht zijn de backups. Je kijkt er meestal niet naar om. Totdat je ze nodig hebt. Dan zijn het ineens de belangrijkste bestanden van de wereld.
Let op: niet alle hostingproviders maken backups van jouw hosting account. Bij sommige providers is backup en herstel een aanvullende module die separaat moet worden aangeschaft. Ook bij reseller-accounts zijn backups regelmatig niet automatisch geactiveerd en moeten zelf geconfigureerd worden.
Daarnaast verschilt het enorm hoe vaak een provider een backup van jouw data maakt. Gebruikelijk is in ieder geval 1x per dag, maar er zijn ook providers die dit meerdere malen per dag doen. Er kan ook nog een verschil zijn in de frequenties van backup van de bestanden en de backup van de database.
En dan is er nog verschil in hoe lang een backup bewaard blijft. Ook hier zijn grote verschillen: kan je enkele dagen terug of kan je zelfs weken of maanden terug? Als je erachter komt dat je website gehackt is wil je in sommige gevallen juist liever over een kopie van bijvoorbeeld enkele weken geleden beschikken zodat je de situatie van voor de hack kan herstellen. Vaak zie je wel dat het aantal backups verder in de tijd terugloopt. Bijvoorbeeld 1 backup per dag voor de laatste 2 weken, daarna 1 backup per week voor de 4 weken daarvoor, daarna 1 backup per maand voor een aantal maanden daarvoor, etc.
Wat is een goede backup strategie? Als stelregel kan je nemen dat je minimaal 1x per dag een volledige backup wil van je hosting account (bestanden, database en eventueel emailboxen). Meer is altijd beter. Dit geldt ook voor het bewaarbeleid: minimaal 2 weken is aan te raden, en ook hier: meer is beter.
Je kan er ook nog voor kiezen om zelf backups te draaien binnen WordPress. Ook daar zijn kanttekeningen bij te plaatsen: vaak plaatsen deze backup plugins de bestanden niet off-site maar op de webserver zelf en dit brengt risico’s met zich mee. De backup-omgevingen van hosting providers draaien gebruikelijk niet in dezelfde datacenters als waar jouw website draait. Dit om een zogenaamde ‘disaster recovery’ mogelijk te maken. Als illustratief voorbeeld gebruiken we hiervoor vaak het volgende scenario: hoe veilig en herstelbaar is jouw data wanneer er een vliegtuig neerstort op het datacenter waar jouw website draait? In dat geval is een off-site backup essentieel.
Dat neemt niet weg dat er prima valide redenen zijn om toch een backup in WordPress te maken. Zeker als je de backup maar kort nodig hebt omdat je bijvoorbeeld een grote wijziging of update wil doorvoeren en snel en eenvoudig terug wil kunnen naar de oorspronkelijke situatie als dat nodig blijkt te zijn.
HTTPS & SSL Certificaten
HTTPS is een protocol waarmee browsers en webservers veilig met elkaar kunnen verbinden. Alle communicatie over een dergelijke verbinding wordt met behulp van SSL versleuteld zodat er wederzijds vertrouwen is tussen de browser en de webserver en niemand anders de gegevens kan inzien of aanpassen. In het verleden zag je dat vooral webshops hier gebruik van maakten maar tegenwoordig maken vrijwel alle websites gebruik van HTTPS. Het feit dat Google heeft aangegeven om websites zonder HTTPS negatief te beïnvloeden in de zoekresultaten heeft daar ook zeker aan bijgedragen.
Deze beveiliging wordt geregeld door installatie van beveiligingscertificaten. Er zijn inmiddels een aantal instanties die dergelijke certificaten gratis uitgeven waarvan de bekendste LetsEncrypt is.
Vrijwel alle hostingproviders bieden inmiddels dit soort certificaten gratis aan en er is absoluut geen enkele reden te bedenken waarom je hier als site-eigenaar geen gebruik van jou maken. De aanvraag, uitgifte en vernieuwing wordt meestal volledig automatisch verzorgd.
Je kan het niveau van beveiliging nog iets verder opschroeven door HSTS te gebruiken. Hiermee geef je als site-eigenaar aan dat jouw website altijd en alléén via een HTTPS verbinding bezocht moet worden. Dan geef je pas aan dat je beveiliging serieus neemt! Maar let op: mocht om welke reden dan ook jouw certificaat niet meer valide zijn dan is je site ook niet meer te openen.
Automatische patches
Een dienst die je eigenlijk alleen bij de ‘betere’ hostingproviders tegenkomt is het automatisch repareren van bekende kwetsbaarheden. Een bekend voorbeeld hiervan is de Patchman software die je bij veel providers tegenkomst. Deze software scant alle hosting accounts op bekende kwetsbaarheden in o.a. WordPress, vaak ook voordat deze gepubliceerd worden, en zorgt ervoor dat deze automatisch gerepareerd worden. Superhandig!
DNS firewalls
DNS firewalls worden vaak niet door hostingproviders aangeboden maar werken wel naadloos samen met jouw hosting account. Een bekende leverancier van dergelijke diensten is Cloudflare. Doordat zij zich nestelen tussen de bezoeker en de webserver en al het verkeer daartussen analyseren kunnen ze het aanvalsoppervlak enorm verkleinen. Op deze manier kan je website volledig transparant beschermd worden tegen kwaadwillende bezoekers op basis van bekende IP adressen, specifieke landen blokkeren, verkeer van bots uitsluiten en verdachte links eruit filteren.
WordPress instellingen
Voor de beveiliging van WordPress zelf maken we een opdeling in algemene instellingen die zowel voor de website als de Admin omgeving gelden en specifieke aanbevelingen voor de Admin omgeving.
Schakel over op HTTPS
Zoals hierboven al eerder beschreven is een veilige verbinding door middel van HTTPS de standaard in 2022. Maar als jouw website wat ouder is kan het onvoldoende zijn om alleen een certificaat te installeren bij je hosting provider. In dat geval moet er soms ook nog aan de instellingen van WordPress gesleuteld worden om alles weer feilloos te laten werken.
Stap 1: Het wordpress adres aanpassen.
Via Instellingen -> Algemeen kom je op de pagina waar je het WordPress-adres en Siteadres kan aanpassen. Zorg ervoor dat deze beide met https:// beginnen in plaats van http://
Stap 2: Mixed content
Browsers vinden het niet leuk als een pagina die ingeladen wordt over HTTPS onderhuids toch nog onderdelen inlaadt. Dan ziet de gebruiker een gebroken slotje in de adresbalk met een melding van “mixed content”. Het is daarom zaak om alle links naar onderdelen in het thema en op de pagina’s te converteren van HTTP naar HTTPS. Dat kan via een zoek-en-vervang opdracht met bijvoorbeeld de ‘Better search and replace’ plugin of door bijvoorbeeld de ‘Really Simple SSL’ te installeren die dit automatisch probeert af te handelen.
Let wel op dat het zoeken-en-vervangen onherstelbare wijzigingen in je database aanbrengt. Laat dit altijd doen door een expert en maak altijd een backup voordat je een dergelijke actie doorvoert.
Stap 3: Stuur bezoekers automatische naar de HTTPS versie.
Er zijn een aantal manier om bezoekers automatische naar de HTTPS versie van de website te sturen.
De meest eenvoudige en robuuste methode is het inschakelen van HSTS op je hostingpakket. Deze instelling forceert eigenlijk alle communicatie met de website over HTTPS.
Schakel niet gebruikte onderdelen uit
Om het eerder genoemde aanvalsoppervlak zo klein mogelijk te krijgen is het verstandig om onderdelen die je niet gebruikt uit te schakelen. Bekende voorbeelden hiervan zijn het volledig uitschakelen van de mogelijkheid te reageren en het uitschakelen van de REST API en XML-RPC. De meeste beveiligings-plugins voorzien in mogelijkheden om dit met 1 druk op de knop in te regelen.
Ook raden we aan om ongebruikte plugins en thema’s te verwijderen. Wel raden we aan altijd het meest recente standaard thema (op dit moment TwentyTwo) te laten staan zodat je bij grote problemen met je eigen thema terug kan schakelen naar een basis-thema dat 100% zeker compatible is en nog werkt.
Gebruik een beveiligingsplugin
En daar is ie dan, de meest voor de hand liggende tip: gebruik een beveiligingsplugin! Er zijn een groot aantal uitstekende beveiligings plugins beschikbaar (waarvan een gratis versie te gebruiken is) die een groot deel van de eerder en hierna te noemen tips eenvoudig voor je kunnen regelen. Denk aan het beveiligen van je Admin omgeving, het scannen op malware en het tegenhouden van indringpogingen via SQL injectie op Cross-Site-Scripting. In een volgend artikel zullen we een overzicht maken tussen de mogelijkheden van verschillende plugins maar dat gaat hier te ver.
Bekende plugins met een gratis variant zijn:
- Wordfence Security
- Sucuri Security
- iThemes Security
- All In One WP Security & Firewall
- BulletProof Security
Beperk de rechten van gebruikers
Een veel gebruikt mantra in de beveiligingswereld is ‘zero trust policy’: vertrouw niets of niemand en geef niemand meer rechten dan strikt noodzakelijk is. Dat geldt ook voor WordPress. Er zijn binnen WordPress een aantal standaard rollen beschikbaar die reiken van eenvoudige abonee tot beheerder en zelfs super-admin met daaraan gekoppeld rechten.
Naast dat iedere rol wel/geen toegang heeft tot bepaalde modules en functies kan je ook de toegang beperken tot ‘eigen inhoud’. Zo kan een auteur alleen eigen artikelen bewerken maar niet die van anderen. Een plugin zoals ‘User Role Editor’ kan deze rollen en rechten heel inzichtelijk maken.
Kijk vooral uit met het uitdelen van gebruikersaccounts met ‘beheerder’ rechten: deze gebruikers kunnen bijvoorbeeld plugins en thema’s installeren/deinstalleren en daarmee het systeem instabiel of onveilig maken.
Gebruik geen ‘nulled’ plugins en thema’s
Een ‘nulled’ plugin is een plugin waar normaal gesproken voor betaald dient te worden maar die door iemand zo is aangepast die iedereen hem gratis kan gebruiken zonder licentie. Waarom is dit een slecht idee?
Om te beginnen mag het natuurlijk niet. Nou denk ik niet dat de politie vrij snel bij je op de stoep staat als je toch stiekem een nulled versie van een plugin gebruikt. Maar dergelijk gebruik gaat gewoon in tegen de licentievoorwaarden van de betreffende software. De ontwikkelaars steken vaak veel tijd in de ontwikkeling van een plugin of thema en ondersteunen deze nog jaren met updates. Het is dan toch ook meer dan redelijk om ze hiervoor te belonen.
Veel belangrijker is dat je voor de meeste nulled-versies van plugins en thema’s geen automatische updates meer kan draaien. Dus ook geen beveiligingsupdates. Je moet dan wachten totdat er een nieuwe nulled-versie van de update beschikbaar is zodat je deze handmatig kan installeren.
De laatste en belangrijkste reden is dat je niet weet of er niet stiekem nog meer code is aangepast of toegevoegd. Misschien is er een achterdeurtje ingebouwd en zet je daarmee jouw site wagenwijd open voor hackers.