WordPress staat bekend om zijn open karakter, de grote diversiteit aan grafische themes en de ongekende mogelijkheden van plugins. Maar doordat iedereen in de achterliggende code kan neuzen, brengt dit ook veiligheidsrisico’s met zich mee. Een goede WordPress veiligheid voorkomt een heleboel ellende.

WordPress veiligheid, een kind kan de was doen

Wij hebben een aantal tips op een rij gezet waarmee je de veiligheid van jouw WordPress website kunt verbeteren.

Update WordPress

Het is een beetje een no-brainer, maar het wordt helaas nogal eens vergeten; zorg ervoor dat je te allen tijde de laatste versie van WordPress op jouw server hebt staan. Het team achter WordPress brengt met grote regelmaat nieuwe versies van WordPress uit, waarmee bekende veiligheidsissues gefixt worden. Zet dus in je agenda of kras het met een mes in jouw bureau: check periodiek of er een update is van WordPress. WordPress veiligheid begint met het updaten van WordPress.

Update de plugins en themes

Het is aan ten zeerste aan te raden plugins (en themes) regelmatig te updaten én om niet gebruikte plugins te verwijderen. Dat maakt het niet alleen overzichtelijk, maar het verkleint ook de kans op veiligheidsproblemen. Zorg er bovendien voor dat je jezelf niet laat verleiden tot het downloaden van een gratis plugin of theme van verysecurewordpressplugin.ru. Ga daarvoor naar betrouwbare sites als wordpress.org of themeforest.com (commercieel) en lees de reviews, zodat je een indruk krijgt van de kwaliteit van de plugin.

Zorg voor de juiste bestandsrechten

Verkeerde bestandrechten kunnen ertoe leiden dat mensen met snode plannen zich toegang kunnen verschaffen tot jouw server. Hier vind je een uitvoerige beschrijving van de bestandsrechten zoals die voorgeschreven worden door WordPress.
Let op: Hoewel de permissie 777 normaal gesproken een absolute no-go is, is het in sommige gevallen noodzakelijk dat de folder /uploads in /wp-content de permissie 777 krijgt. In dat geval is het aan te raden dat om in deze folder een .htaccess-file te plaatsen met de volgende inhoud:
php_value engine offDit zorgt ervoor dat php in deze map uitgeschakeld wordt en er dus geen kwaadaardige code geupload kan worden.

Verberg de WordPress versie

Zonder veel technische kennis kan achterhaald worden welke versie van WordPress je geïnstalleerd hebt. Een vluchtige blik op de html-code leert je namelijk het volgende:
<meta name="generator" content="WordPress 3.5.1" />Omdat algemeen bekend is welke veiligheidsrisico’s er bij een bepaalde versie van WordPress horen, zou deze wetenschap dus gebruikt kunnen worden om toegang te krijgen tot de server.

Er zijn een tweetal zaken die je kunt doen om te voorkomen dat mensen het versienummer achterhalen:
1. Verwijder het bestand readme.html uit de root van jouw website.
Omdat dit bestand bij een update van WordPress automatisch weer wordt toegevoegd wordt, is het wellicht beter om ervoor te zorgen dat dit bestand niet meer aangroepen kan worden. Dit doe je door de .htaccess-file te openen en de volgende code toe te voegen:
<files readme.html>
order allow,deny
deny from all
</files>

2. Open het bestand functions.php en voeg de volgende code toe:
function remove_wp_version () {
    return " ";
}
add_filter( 'the_generator', 'remove_wp_version' );
Dit zorgt ervoor dat de versie-informatie niet meer te vinden is in jouw code.

Verberg foutmeldingen bij het inloggen

Een nadeel van het standaard WordPress inlog-scherm is dat bij verkeerd inloggen verteld wordt of het een verkeerde gebruikersnaam of een verkeerd wachtwoord betreft. Dit maakt het een stuk gemakkelijker om via een ‘brute force’-aanval toegang te krijgen tot de website.
Om deze functionaliteit uit te zetten open je de file: functions.php in jouw WordPress theme en voeg je de volgende code toe:
function failed_login() {
    return "Uw inloggegevens zijn niet correct";
}
add_filter ( 'login_errors', 'failed_login' );
Dit zorgt ervoor dat gebruikers een algemene foutmelding krijgen.

Blokkeer auteurpagina’s

Voor ieder gebruikersaccount dat aangemaakt wordt binnen WordPress, wordt er ook een auteurpagina gegenereerd. In veel gevallen is via deze auteurpagina de gebruikersnaam van het betreffende account te achterhalen. Deze informatie zou gebruikt kunnen worden om via een ‘brute force’-aanval toegang te krijgen tot de website. Om dit te voorkomen kun je de auteurpagina’s blokkeren.
Maak in jouw (child)thema de file author.php aan en voeg de volgende code toe:
<?php
    $location = "Location: ".get_site_url();
    header("HTTP/1.1 301 Moved Permanently");
    header($location);
?>
Mocht je de plugin Yoast SEO geïnstalleerd hebben, dan kun de auteurpagina’s blokkeren door bij de menu-optie ‘Search Appearence’ onder het tabblad ‘Archieven’ de Auteursarchieven te deactiveren.

Gebruik .htaccess om wp-config.php te beschermen

Als WordPress gebruiker weet je waarschijnlijk hoe belangrijk de file wp-config.php is. Deze file bevat immers alle informatie die nodig is om toegang te krijgen tot jouw database. Om deze file te beschermen kun je hetvolgende doen:
Open de .htaccess file in de root van jouw website en voeg de volgende code toe:
<files wp-config.php>
order allow,deny
deny from all
</files>
Dit zorgt ervoor dat niemand toegang krijgt tot wp-config.php

Blokkeer XML-RPC aanvragen

XML-RPC maakt het mogelijk dat externe apps communiceren met jouw WordPress website. Je kunt hierbij denken aan het posten van een bericht of het modereren van een reactie via een externe applicatie. Er zijn WordPress-plugins die gebruik maken van XML-RPC, zoals Jetpack. We zien steeds vaker dat XML-RPC gebruikt wordt voor een ‘brute force’-aanval of een DDOS-aanval. We adviseren dan ook om deze functionaliteit uit te zetten.
Open de .htaccess file in de root van jouw website en voeg de volgende code toe:
<files xmlrpc.php>
order allow,deny
deny from all
</files>

Installeer de plugin BBQ: Block Bad Queries

Deze plugin zorgt ervoor dat jouw website beschermd wordt tegen kwaadaardige URL aanvragen (zoals eval, base64, etc.). Je kunt deze plugin hier vinden.

Scherm de map /wp-admin af

Het is van belang dat de map /wp-admin, het centrale zenuwstelsel van iedere WordPress website, niet geopend kan worden door mensen met dubieuze bedoelingen. Om te bepalen welke IP-adressen toegang hebben tot deze map, kun je een .htaccess-bestand toevoegen aan de map /wp-admin met de volgende inhoud:

Order Deny,Allow
Deny from all
allow from xxx.xxx.xxx.xx
Vergeet niet om xxx.xxx.xxx.xxx te vervangen door jouw eigen IP-adres.

Update: Om te voorkomen dat plugins, die gebruik maken van Ajax, niet meer werken doordat de map /wp-admin afgeschermd is, kun je de volgende code toevoegen aan het .htaccess-bestand:

<files admin-ajax.php>
order allow,deny
allow from all
</files>

Verwijder de gebruiker ‘admin’

Standaard geeft WordPress het administrator-account de naam ‘admin’. Als iemand zou proberen om via een ‘brute force’-aanval toegang te verkrijgen tot jouw website, dan gebeurt dit geheid met de gebruikersnaam: ‘admin’. Je doet er dan ook goed aan om dit te wijzigen in iets anders.

Verander de database prefix

Omdat WordPress de standaard databaseprefix /wp_ heeft, hebben de database-tabellen van duizenden WordPress websites exact dezelfde naam. Mocht er op een bepaald moment een veiligheidslek ontstaan in een theme of plugin, dan zullen hackers zich geheid gaan richten op deze database-structuur. Het is dan ook verstandig om bij installatie van jouw WordPress site, deze prefix te veranderen. Je opent hiervoor de file wp-config.php en geeft een alternatieve prefix op, zoals:
$table_prefix = 'sitewp_';Heb je WordPress reeds geïnstalleerd zonder deze prefix te wijzigen? Geen probleem, want dit kun je op ieder willekeurig moment doen. Dat kan handmatig, maar er zijn gelukkig ook plugins die het voor je regelen. Een voorbeeld hiervan is: Change Table Prefix. Let op: zorg ervoor dat je altijd een backup maakt voordat je aan de slag gaat met de database en zorg ervoor dat je de nieuwe prefix ook in wp-config.php verwerkt.

Limiteer het aantal login pogingen

Om te voorkomen dat iemand via een ‘brute force’-aanval inloggegevens kan gaan raden, is het een goed idee om het maximaal aantal foutieve login-pogingen te limiteren. De plugin Limit Login Attempts Reloaded is hierbij een goede optie. Wanneer iemand het maximaal aantal (door jou ingestelde) inlogpogingen verbruikt heeft, kan hij/zij een tijd niet meer inloggen. Bovendien worden de IP-adressen geregistreerd dus kan de Sherlock Holmes in jou op zoek naar de namen achter de foutieve inlogpogingen.

Bonus tips

Hoewel de volgende tips niet direct betrekking hebben op de WordPress veiligheid, maken ze het leven van een WordPress beheerder een stuk aangenamer. Doe er dus jouw voordeel mee 🙂

Encodeer e-mailadressen

Notoire spammers gebruiken zogenaamde ‘bots’ die websites doorzoeken en e-mailadressen verzamelen. Deze e-mailadressen worden vervolgens tot het einde der tijden voor spam-campagnes misbruikt. Door e-mailadressen te encoderen kunnen ze niet herkend worden door bots en blijf je hopelijk vrij van spam. Een goede plugin die je kunt gebruiken is: Email Address Encoder, een lichtgewicht plugin maar o zo handig.

Maak periodieke back-ups

Ondanks alle bovengenoemde veiligheidsmaatregelen bestaat er nog steeds een kans dat het misgaat met een WordPress website. Een slaperige medewerker die op maandagochtend teveel folders verwijdert van de server of een hostingpartij die met de noorderzon vertrokken is… dan wil je kunnen rekenen op back-ups. Zorg er uiteraard wel voor dat de back-ups op een andere locatie opgeslagen worden.

WordPress veiligheid staat helaas nog niet bij alle bedrijven op de agenda. Toch kan een gehackte WordPress website vervelende gevolgen hebben. Wil je meer informatie over WordPress veiligheid? Neem dan contact met ons op.