Het platform WordPress heeft niet de beste naam als het gaat om haar beveiliging tegen hackers. Dagelijks worden er bijvoorbeeld al meer dan 100.000 WordPress websites gehackt. Je moet er natuurlijk helemaal niet als website-eigenaar aandenken dat dit ook met jouw website gebeurd en dat deze vervolgens wordt gebruikt voor illegale praktijken. Toch zouden wij graag een zekere nuance over de veiligheid van wordPress willen aanbrengen; vaak worden namelijk de beveiligingsmaatregelen door de gebruiker zelf niet serieus genoeg genomen, waardoor hackers gemakkelijker mogelijkheden zien. In dit artikel leggen wij stap voor stap uit hoe wij of hoe jijzelf jouw website extra kan beveiligen.

Structuur van de handleiding WordPress website extra beveiligen:
  1. Kies zorgvuldig jouw WordPress-hosting
  2. ‘Table Prefix’ van WordPress database veranderen

  3. WordPress gebruikersnaam en sterk wachtwoord

  4. WordPress en plugins up-to-date houden

  5. WordPress-login verder beveiligen en vergrendelen

  6. Maak gebruik van een https-verbinding

  7. Activeer een beveiligingsplugin

  8. Back-ups

  9. Selecteer de juiste PHP-versie

  10. Verplaats wp-config.phpbestand naar een andere map

  1. Verberg je WordPress versie
  2. Deactiveer XML-RPC.php

  3. Schakel file-editing uit in jouw dashboard

  4. Beveilig jouw .htaccess bestand en wp-config.php bestand

  5. Pas jouw bestandsrechten aan indien nodig

  6. Voorkom hotlinking

  7. Voorkom openbare site index

  8. Blokkeer sommige bestanden in .htaccess

  9. HTTP-beveiligingsheaderstoevoegen

De stappen die hieronder beschreven zullen worden kan door iedere WordPress-gebruiker uitgevoerd worden zonder dat men enige technische kennis nodig heeft. Zorg er te allen tijden voor dat je eerst een backup maakt van jouw WordPress website plus databases, voordat je de stappen gaat uitvoeren. Er kan namelijk altijd iets mis gaan!

1. Kies zorgvuldig jouw WordPress-hosting

De beveiliging van jouw WordPress website speelt zich voornamelijk op een hoger niveau af dan jouw eigen WordPress-dashboard. Wij bedoelen hiermee de server waar jouw (toekomstige) website op gaat draaien. Een van de allereerste keuzes die je als website-eigenaar moet gaan maken gaat over de hostingpartij. Het cliché ‘goedkoop is duurkoop’ komt bij deze keuze goed van pas. Wij raden jou aan een hostingpartij te kiezen met de nieuwste besturingssystemen, malware/ virusscanners en DDoS beveiliging. Verder is het natuurlijk ook altijd verstandig om desbetreffende reviews te lezen over het bedrijf.

Onze aanraders:

2. ‘Table Prefix’ van WordPress database veranderen

Tijdens de installatie van de WordPress software op jouw server moet er een zogeheten ‘Table Prefix’ worden opgegeven. Standaard staat deze op ‘wp_’ ingesteld, maar het is aan te raden vanwege de veiligheid om het wp-gedeelte te veranderen in iets anders. Bijvoorbeeld: q9z02_ 

3. WordPress gebruikersnaam en sterk wachtwoord

Een hele belangrijke en simpele stap uit deze handleiding ‘WordPress website extra beveiligen‘ is het verzinnen van een sterke gebruikersnaam plus wachtwoord voor jouw WordPress-login. De standaard gebruikersnaam van WordPress is namelijk ‘Admin’ (iedere hacker weet dit) en als je deze niet verandert hoeft men alleen nog je wachtwoord te achterhalen. Daarbij is het belangrijk dat deze gegevens (nieuwe gebruikersnaam en wachtwoord) op een veilige locatie worden opgeslagen, zodat hackers hier niet bij kunnen komen. Op deze manier wordt er voorkomen dat hackers gemakkelijk binnen kunnen treden tot jouw dashboard.

4. WordPress en plugins up-to-date houden

Blijf up-to-date met jouw WordPress versie, de plugins en niet te vergeten jouw WordPress thema! De updates bevatten vaak bugfixes en verbeteringen in de beveiligingsstructuur. Verouderde softwares en plugins bevatten veel zwakke plekken die mogelijkheden bieden voor hackers. Door alles op tijd up te daten voorkom jij dat je slachtoffer wordt van hacking. Verder willen wij als tip geven dat je alleen plugins en thema’s moet downloaden die bekend zijn om op deze manier kwetsbaarheden in de bestanden te voorkomen. Via ‘VirusTotal’ kun je bekijken of er eventueel virussen aanwezig zijn in deze bestanden.

5. WordPress-login verder beveiligen en vergrendelen

Wanneer je toch jouw WordPress-login aan het beveiligen bent kun je dit ook nog doen doormiddel van drie plugins. Met de plugin ‘WPS Hide Login’ kun je eenvoudig jouw URL voor de inlogpagina van jouw dashboard veranderen, deze staat namelijk standaard ingesteld op jouwdomein.nl/wp-admin. Helaas is de /wp-admin variant niet veilig en dient deze dus aangepast te worden.

Met de plugin ‘Limit Login Attempts Reloaded’  kun je het aantal inlogpogingen limiteren: wanneer dit aantal wordt overschreden wordt het IP-adres tijdelijk buitengesloten. Aangezien hackers vaak gebruiken maken van zogeheten bots om jouw gebruikersnaam en wachtwoord te achterhalen is het voor hun niet meer mogelijk om duizenden combinaties in te vullen op de login-pagina. Dit maakt jouw website een stuk minder interessant voor hackers.

Met de plugin ‘Two-Factor’ kun jij het inloggen uitbreiden met een extra stap. In het vervolg moet je niet alleen je gebruikersnaam plus wachtwoord invullen maar ook een extra code die jij per mail of sms ontvangt, daarna ben je pas daadwerkelijk ingelogd.

Met de plugin ‘WP Hide & Security Enhancer‘ kun je erg gemakkelijk jouw thema en plugins volledig verbergen, zodat deze niet aan de voorkant worden weergegeven. Op deze manier wordt de websitebeveiliging naar een hoger niveau gebracht. Wij raden aan alleen de URL-slugs van jouw thema en plugins aan te passen via WP Hide & Security Enhancer. Je kan na het instellen van de plugin hier en hier checken of het werkt!

6. Maak gebruik van een https-verbinding

Een van de belangrijkste beveiligingsmethode van WordPress websites is om jouw site te laten lopen via een zogenoemde https-verbinding. De https zorgt voor een veilige verbinding tussen de gebruikers browser en de server met jouw website of webshop erop. Dit kun je eenvoudig instellen door het aanvragen van een SSL-certificaat via jouw hostingpartij en het vervolgens activeren met de plugin ‘Really Simple SSL’.

De laatste stap (activatie) kan ook bewerkstelligd worden zonder een plugin, alleen wordt dit een iets technischer verhaal:

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

</IfModule>
define('FORCE_SSL_ADMIN', true);

7. Activeer een beveiligingsplugin

Er zijn diverse betrouwbare beveiligingsplugin beschikbaar voor WordPress, zoals ‘Wordfence’  en ‘Security Ninja’. Er zijn zowel gratis als betaalde versies van beide plugins beschikbaar. De plugins scannen bijvoorbeeld voor malware, IP-whitelisting, IP-blacklisting en geven tips t.b.v. de beveiliging. Verder geven sommige plugins ook nog eens tips om jouw WordPress website extra te beveiligen.

8. Back-ups

Zorg dat je regelmatig back-ups maakt van jouw website en database(s), via de meeste hostingproviders kun je tegenwoordig automatisch back-ups maken die een langere periode beschikbaar zijn of via een van de vele beschikbare plugins.

Voor de volgende stappen is iets meer technische kennis vereist om jouw WordPress website extra te kunnen beveiligen:

9. Selecteer de juiste PHP-versie

Eerst zullen wij in het kort even uitleg wat überhaupt PHP is. PHP is de afkorting voor Hypertext Preprocessor en dat is de scripttaal waarmee een webserver dynamische webpagina’s kan verwezenlijken. PHP is alleen zichtbaar in de database van de server, de eindgebruiker ziet alleen het resultaat: namelijk de HTML-webpagina.

Zorg altijd dat jij de nieuwste PHP-versie gebruikt, de oudere versies bevatten namelijk geen beveiligingsondersteuning meer! Op dit moment raden wij aan een minimale PHP-versie van 7.2 te gebruiken om op deze manier blootstelling aan veiligheidsrisico’s te verminderen.

10. Verplaats wp-config.php bestand naar een andere map

Het wp-config.php bestand bevindt zich standaard in de ‘publieke map’ van jouw WordPress installatie, het is daarom raadzaam om dit bestand te verplaatsen naar een map die niet toegankelijk is voor www-adressen. Het bestandje verplaatsen naar een hogere map is meestal al voldoende! Wel is het belangrijk dat dan de volgende code in hetzelfde wp-config.php bestand wordt toegevoegd:

<?php
include('/naamvandehoofdmap/naamvanhetmapje/wp-config.php');

Let op: bij sommige webhostingproviders is deze optie niet mogelijk, vraag dit altijd na! Bijvoorbeeld niet mogelijk via Kinsta of Vimexx.

11. Verberg je WordPress versie

Het is mogelijk om via de thema-editor in jouw WordPress-dashboard de WordPress versie van jouw website te verbergen. Aan het ‘functions.php’ bestand van jouw thema moet dan een extra code worden toegevoegd. Raadzaam is om een zogeheten ‘child-theme’ aan te maken en de code toe te voegen in het functions.php bestand van dat thema, zo voorkom je eventuele beschadigingen aan jouw website (de broncode van een thema is namelijk erg gevoelig voor fouten, dus weet wat je doet!). De code is als volgt:

function wp_version_remove_version() {

return '';

}

add_filter('the_generator', 'wp_version_remove_version');

 

Indien er nog sprake is van een blanco functions.php in jouw ‘child-theme’, voeg dan de volgende code toe:

<?php

function wp_version_remove_version() {

return '';

}

add_filter('the_generator', 'wp_version_remove_version');

12. Deactiveer XML-RPC.php

Dit is een wat oudere functionaliteit van de WordPress installatie, waarmee je op afstand kunt communiceren met jouw website. Bijvoorbeeld het schrijven en plaatsten van berichten via een app op je telefoon. De meeste van jullie (dashboard-gebruikers) maken hier geen gebruik van, waardoor het aan te raden is deze functie te blokkeren aangezien het hackers een kans geeft binnen te treden tot jouw website. Let op sommige plugins zoals ‘JetPack‘ maken wel gebruik van deze optie. 

 

Voeg de volgende code toe aan jouw functions.php van het ‘child-theme’:

remove_action('wp_head', 'rsd_link');
add_filter( 'xmlrpc_enabled', '__return_false' );


En voeg de volgende code toe aan jouw .htaccess bestand:

<Files xmlrpc.php> Order Allow,Deny Deny from all </Files>

 

Het is ook mogelijk dit te blokkeren via de ‘Disable XML-RPC‘ plugin. Vink vervolgens de optie ‘Disable XML-RPC API Interface’ aan.

13. Schakel file-editing uit in jouw dashboard

Als een hacker toch binnen is gekomen via de login-url van jouw website zal hij of zij als eerste jouw plugin- en themabestanden proberen aan te passen. Dit kan helemaal uitgeschakeld worden door de volgende code helemaal onderin toe te voegen aan jouw ‘wp-config.php’ bestand:

define('DISALLOW_FILE_EDIT', true);

14. Beveilig jouw .htaccess bestand en wp-config.php bestand

Een heleboel regeltjes voor de Apache instellingen van jouw website of webshop, zoals je al vast wel hebt gezien, staan in je .htaccess bestand. Het wp-config.php bestand bevat daarentegen weer de meest gevoelige toegangsgegevens van jouw website (onder andere de databasenaam). Het is daarom belangrijk deze bestanden van jouw WordPress website extra te beveiligen door de volgende code helemaal onderaan het .htaccess bestand toe te voegen:

<Files wp-config.php> Order Allow,Deny Deny from all </Files>

<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

15. Pas jouw bestandsrechten aan indien nodig

Het is belangrijk voor verbetering van de beveiliging dat de bestandsrechten van je WordPress installatie op de server juist zijn ingesteld. 

16. Voorkom hotlinking

Hotlinking is een moeilijk begrip maar houdt eigenlijk in dat een andere website verwijst naar jouw media (bijvoorbeeld afbeeldingen) zonder bronvermelding met als gevolg extra ongewild dataverkeer voor jouw eigen website. Dit is simpel te voorkomen, waarbij de crawlers van Google en andere zoekmachines niet worden geblokkeerd, door de volgende code toe te voegen aan je .htaccess bestand:

RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?jouwdomeinnaam.nl [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?bing.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yahoo.com [NC]
RewriteRule \.(gif|jpg|jpeg|bmp|zip|rar|mp3|flv|swf|xml|php|png|css|pdf)$ - [F]

 

Via de website ‘atlas.com‘ kun je testen of alles goed is ingesteld en of er daadwerkelijk niet meer hotlinking kan plaatsvinden.

17. Voorkom openbare site index

Het kan een risico vormen als iedereen kan inzien welke en wat voor soort bestanden in een map aanwezig zijn. Dit is gemakkelijk uit te sluiten door de volgende code bovenaan je .htaccess bestand toe te voegen:

Options -Indexes

18. Blokkeer sommige bestanden in .htaccess

Verberg de exacte WordPress versie van jouw website op de readme.html link door het bestandsrecht van het ‘readme.html’ bestand (staat in de publieke map) aan te passen naar 400.

Verberg het ‘install.php’ en ‘upgrade.php’ bestand door de volgende code toe te voegen aan jouw .htaccess bestand (Gelijk onder ‘Options -Indexes’):

<Files install.php>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from all
Satisfy All
</IfModule>
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
</Files>

<Files upgrade.php>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from all
Satisfy All
</IfModule>
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
</Files>

19. HTTP-beveiligingsheaders toevoegen

Deze allerlaatste stap om jouw WordPress website extra te beveiligen tegen hackers wordt vaak vergeten, terwijl deze stap juist zorgt voor nog een extra laag beveiliging. De zogeheten security headers vertellen de browsers van de gebruikers hoe om te gaan met de inhoud/ bestanden van jouw website. Via de website ‘securityheader.io‘ kun je scannen welke security headers actief zijn op jouw website. Voor het instellen van de verschillende security headers moet je de volgende code toevoegen aan jouw .htaccess bestand:

<IfModule mod_headers.c> 
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Xss-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "no-referrer-when-downgrade"
</IfModule>

Deze stap kan ook eventueel uitgevoerd worden aan de hand van een plugin. De plugin die wij hiervoor aanraden is ‘HTTP Readers’. De volgende opties moeten als volgt ingesteld worden: