Je WordPress-site beveiligen tegen hackers

Door Edwin Toonen – 3 september 2013 – Webdesigner Magazine

Je wachtwoord is de eerste verdedigingslinie. Zorg voor een complex wachtwoord en verander regelmatig.

Momenteel draaien er wereldwijd ongeveer 60 miljoen websites op WordPress. Bovendien wordt er voor ongeveer 25% van de nieuwe websites gekozen voor het gratis CMS als basis. WordPress is buitengewoon populair bij gebruikers en als gevolg daarvan ook heel populair bij hackers en spammers. Die willen maar al te graag misbruik maken van je site, voor allerlei snode doeleinden.

WordPress is een solide en veilig platform. Maar, zoals met alle online systemen, vereist het wel constant onderhoud en aandacht om veiligheidsrisico’s de baas te blijven. Het platform wordt regelmatig bijgewerkt en doet zijn best om nieuwe veiligheidsproblemen aan te pakken bij elke update. Er zijn echter nog verschillende technieken en bronnen waarmee je je website wat extra beveiliging meegeeft.

Sommige van deze tips zijn erg eenvoudig te implementeren, maar maken een groot verschil voor de veiligheid van je site, je computer en je algemene online aanwezigheid. Sommige vereisen iets meer knowhow, maar zorgen er wel voor dat je met gerust gevoel kunt gaan slapen.

01 Pas je login aan
Gebruik je nog steeds de gebruikersnaam ‘admin’? Dat is het eerste waar bots en exploits naar zoeken. Tijd om dit te veranderen dus. Log in met deze gebruikersnaam en creëer een nieuwe account op Administrator-niveau met een wat uniekere gebruikersnaam. Log uit en vervolgens weer in met je nieuwe account, zodat je de oude kunt verwijderen.

02 Creatieve wachtwoorden
Niemand vindt het leuk om twintig verschillende wachtwoorden te onthouden, maar wachtwoorden horen wel uniek te zijn. Gebruik veel verschillende karakters, zowel hoofdletters als kleine letters. Hoe langer het wachtwoord, hoe beter. Kijk ook eens naar een dienst als LastPass.

03 Blijf up-to-date
Een van de meest voorkomende redenen voor een zwakke plek in je WordPress-site is het gebruik van een verouderde versie. Het is belangrijk om je installatie up-to-date te houden. WordPress laat op je Dashboard weten wanneer er een nieuwe versie uit is. Volg de aanwijzingen.

04 Vermijd slechte themes
Er zijn talloze websites met gratis WordPress-themes. Maar pas op! Vaak hebben deze themes nog wat onzichtbare verrassingen aan boord. Je kunt het beter bij de vertrouwde bronnen houden via WordPress.org. Je kunt ook je eigen theme bouwen of er eentje kopen op betrouwbare sites als ThemeForest.

05 Verwijder ongebruikte plug-ins
Plug-ins kunnen een belangrijk onderdeel van je site zijn. Ze zorgen voor extra functionaliteit. Sommige plug-ins kunnen echter de deur, al dan niet bedoeld, openzetten voor hackers. Zorg dat je plug-ins altijd binnenhaalt via WordPress en lees de reviews goed door. Ook plug-ins moeten up-to-date gehouden worden. Er zijn ook plug-ins te vinden die juist voor extra veiligheid zorgen, waaronder Better WP Security, Wordfence, Security Ninja en Sucuri Scanner.

06 Gebruik alleen wat nodig is
Heb je een boel plug-ins geïnstalleerd op je site die helemaal niet gebruikt? Zelfs een gedeactiveerde plug-in kan een risico zijn. Verwijder alle ongebruikte plug-ins, themes en bestanden – ook het readme-bestand in de root. Hoe minder spullen, hoe minder risico.

07 Maak een back-up
We kunnen niet vaak genoeg benadrukken hoe belangrijk het is om regelmatig back-ups van je werk te maken! Niet alle aanvallen of hacks zullen je werk verwijderen, maar je zult maar net pech hebben. Bovendien is een schone herinstallatie van je site en content soms de enige manier om er zeker van te zijn dat je van de malware af bent.

08 Houd je PC schoon
Je WordPress-site is niet het enige dat je aandacht verdient. Zorg er ook voor dat je computer zelf goed beschermd is met op zijn minst een degelijke virusscanner. Ook deze moet natuurlijk up-to-date blijven. Je zou je website maar infecteren doordat je er zelf een paar besmette bestanden op plaatst. Ook voor degenen zonder website is dit een goed advies dat je uiteindelijk tijd en geld kan besparen.

09 Geen FTP, maar SFTP
Alle verbindingen naar je server voor het updaten van je bestanden zouden via SFTP moeten gaan, niet via FTP. Hopelijk ondersteunt je hosting dit. Zo niet, dan wordt het tijd om over te stappen. Het is een extra beveiligingsstap die voorkomt dat je inloggegevens onderschept worden door derden.

10 Bescherm je config-bestand
Je kunt je beveiliging een stapje complexer maken door een .htaccess-bestand toe te voegen aan de root van je site. Als je er nog geen hebt, open je een tekstbestand en hernoem je deze naar .htaccess. Vul deze met onderstaande code en zet het bestand in de rootmap van je site. De code voor ‘# BEGIN WordPress’ zorgt ervoor dat bij een PHP-fout je inloggegevens niet toegankelijk zijn in de browser.

# don’t allow wp-config.php to load
<Files wp-config.php>
order allow,deny
deny from all
</Files>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

11 Verander je WordPress-prefix
Deze stap is alleen voor verse installaties (zie de volgende stap voor live sites). Door de standaardprefix ‘wp’ te veranderen voor al je databasevermeldingen, maak je het een stuk lastiger voor aanvallers. Open wp-config.php uit je rootmap, scroll naar beneden tot je de $table_prefix vindt en verander ‘wp_’ naar iets anders, zoals ‘movie_’.

$table_prefix = ‘wp_’;
# Wordt bijvoorbeeld
$table_prefix = ‘movie_’;

12 WordPress-prefix aanpassen voor actieve websites
In stap 11 hebben we laten zien hoe je de prefix ‘wp_’ voor databasetabellen aanpast bij een nieuwe installatie van WordPress. Voor bestaande sites is het iets ingewikkelder. Maak eerst een volledige back-up van je database en bewaar deze op een veilige plek. Neem vervolgens twee exports van je database als tekstbestand.

Hou er eentje als origineel en open de andere in een teksteditor. Vervang ‘wp_ ‘ overal voor je nieuwe prefix. Ga naar het beheerdersgedeelte van je site en deactiveer al je plug-ins. Drop je bestaande database en importeer je nieuwe, aangepaste, tekstbestand. Maak in wp_config.php dezelfde wijzigingen als in stap 11 en heractiveer daarna je plug-ins weer. Controleer de functionaliteit. Als laatste ga je naar Settings>Permalinks en ververs je deze door op Save Changes te klikken.

13 Voorkom bladeren
Om te voorkomen dat mensen de bestanden in je WordPress-map benaderen door het pad in de browser in te voeren, zet je onderstaande code in je .htaccess-bestand. Wederom boven # BEGIN WordPress. Je kunt ook een leeg index.htmlbestand in elke map zetten, maar dit is natuurlijk sneller en makkelijker.

# prevent directory browsing
Options –Indexes

14 Bescherm je .htacces
Het lijkt misschien raar om code in je .htaccess-bestand te zetten die, in principe, zichzelf beschermt. Maar met zo veel van je beveiliging aan boord, kun je beter op veilig spelen. Elke toegang tot dit bestand is een ondermijning van de beveiliging die je net zo zorgvuldig hebt opgezet. Laten we alle deuren op slot doen.

# protect the htaccess file,
<files .htaccess>
order allow,deny
deny from all
</files>

15 IP-adressen beperken
Als jij en de mensen die toegang tot de site nodig hebben een statisch IP-adres hebben, kun je je .htaccess gebruiken om elk ander IP-adres de toegang tot je sitebeheer te ontzeggen. Dit is een uitstekend manier van beveiliging, maar kent wel zijn beperkingen. Zo kun je nooit vanaf een ander IP-adres inloggen. Zet onderstaande code in je .htacces-bestand. Gebruik je eigen IP-adressen.

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName “Access Control”
AuthType Basic
order deny,allow
deny from all
# authorised IP address
allow from ??.???.???.???
# authorized IP address
allow from ??.???.???.???

16 Beperk het inloggen
Door het maximaal aantal toegestane inlogpogingen per IP-adres te beperken, voeg je een extra beveiligingslaag toe. Dit werkt vooral tegen zogenaamde ‘brute force’-aanvallen. Zoek en installeer de plug-in Limit Login Attempts via je beheerdersmenu. Je kunt nu een aantal instellingen configureren en opgeven wanneer je een mailtje wilt ontvangen over een buitengesloten gebruiker.

17 Schakel HTTP TRACE uit
Cross Site Tracking (XST) en Cross Site Scripting (XSS) zijn gangbare aanvalsmethoden. Hierbij wordt een standaardfunctie ‘HTTP TRACE’ misbruikt om cookie- en serverinformatie te achterhalen via headerrequests. Bescherm jezelf hiertegen door deze functionaliteit uit te schakelen. Gebruik deze code in je .htaccess-bestand, wederom boven # BEGIN WordPress.

RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* – [F]

18 Voorkom SQL-injecties
SQL-injecties zijn een veel voorkomend probleem bij WordPress-sites, terwijl ze toch makkelijk te voorkomen zijn. Vaak heeft je hoster al maatregelen genomen om ze tegen te houden, maar je kunt ook nog je eigen barricade opwerpen. Zet onderstaande code in je .htaccess, net onder RewriteBase / (onder # BEGIN WordPress):

# return 403 Forbidden when someone puts
script tags or GLOBALS or _REQUEST stuff
in the URL#
RewriteCond %{QUERY_STRING} (<|%3C)
.*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS
(=|[|%[0- 9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST
(=|[|%[0- 9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

19 De volledige .htaccess
Het .htaccess-bestand is een essentiële en veelzijdige bron voor het toevoegen van extra beveiliging voor je site. Maak daar gebruik van! We hebben geen beveiligingsmaatregelen in je .htacces-bestand gezet die de functionaliteit van de site aantasten, maar toch moet je altijd voorzichtig zijn met dit soort acties. Weet wat je doet voor je iets aan- of toepast. Hieronder vind je een imposante lijst van .htaccess-trucs, maar met wat extra speurwerk ontdek je nog complexere ideeën. Mocht je ooit een 500 Internal Server Error krijgen, is het slim om eerst naar je .htaccess te kijken. Onthoud dat WordPress in staat is om alle code tussen te BEGIN en END-tags aan te passen.

# don’t allow wp-config.php to load
<Files wp-config.php>
order allow,deny
deny from all
</Files>
# prevent directory browsing
Options -Indexes
# protect the htaccess file
<files .htaccess>
order allow,deny
deny from all
</files>
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName “Access Control”
AuthType Basic
order deny,allow
deny from all
# authorised IP address
allow from ??.???.???.???
# authorized IP address
allow from ??.???.???.???
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* – [F]# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# return 403 Forbidden when someone puts script tags or GLOBALS or _REQUEST stuff in the URL#
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Je WordPress-site beveiligen tegen hackers