Jouw website opzetten met WordPress is een simpele manier om snel een strak ogende en interactieve website online te zetten, zonder dat je zelf veel technische kennis over webhosting hoeft te hebben. Juist in deze simpele instap schuilt gevaar. Als je snel een website online wilt zetten, worden de prestaties en de beveiliging van de applicatie vlug over het hoofd gezien.
Ik neem je mee langs vijf veelvoorkomende shortcuts die WordPress gebruik makkelijker maar tegelijkertijd onveilig en traag maken. Lees onze ervaringen met het opzetten en beheren van een schaalbare, snelle en veiligere WordPress-omgeving.
1. Te veel rechten uitdelen tijdens het installeren
Het installeren van WordPress is vaak spannend. Nog voordat ik een WordPress-account aan kan maken ben ik bezig met inloggen op de server en het aanmaken van een database en bijbehorende gebruiker. Enigszins teleurgesteld ben ik dan ook in de foutmelding die verschijnt zodra ik alle gegevens juist heb ingevoerd.
Deze melding verschijnt nadat WordPress de databaseconfiguratie-gegevens heeft gevraagd en getest, maar niet de rechten heeft om deze gegevens in het WordPress-configuratiebestand weg te schrijven. Deze melding wordt vaak bestreden door rechten over de gehele applicatie aan te passen.
Om deze melding, en toekomstige rechtenproblemen, voor te zijn, wordt op sommige websites geadviseerd WordPress schrijfbaar gemaakt voor iedereen (bijvoorbeeld middels chmod -R 777 *) of om de eigenaar van de applicatiebestanden te wijzigen (bijvoorbeeld middels chown -R www-data *). Deze maatregelen vergroten de veiligheidsrisico’s van jouw applicatie.
Het aanpassen van de rechten heeft een hoop gevolgen voor de veiligheid en snelheid van de applicatie, zoals:
- Als de data van de applicatie voor iedere gebruiker op het systeem lees- en schrijfbaar is, is er geen beperking wie aanpassingen maakt in welk bestand dan ook.
- Een applicatielek kan misbruikt worden om meer lekken te introduceren en andere applicaties te infecteren.
- Uitzoeken welke bestanden bij WordPress horen en welke bestanden malafide zijn is zeer tijdsrovend.
- De veiligheid van de applicatie wordt zo sterk als de veiligste applicatie op de server.
- Als er misbruik gemaakt wordt van een lek zorgt dit in veel gevallen voor verhoogde belasting op het systeem waardoor de applicatie vertraagt.
Een mogelijke en veilige oplossing
De manier waarop je een veiligere WordPress-omgeving inricht wordt gegeven in hetzelfde scherm als de melding:
Door het bestand aan te maken met jouw beheersgebruiker ontzeg je WordPress de schrijfrechten op dit bestand. Zo hou je zelf de controle over de inhoud van het configuratiebestand. Jij bepaalt wie configuratiewijzigingen mag maken en voegt hier extra authenticatie aan toe.
Een snelle manier om een veiligere WordPress-installatie uit te voeren is werken via de SSH commandline. In dit artikel wordt uitgelegd hoe WordPress kan worden geïnstalleerd: WordPress installeren via de commandline op manual.true.nl
2. Te veel rechten uitdelen om plugins of themes te installeren
Nu WordPress geïnstalleerd is, kun je de site aanpassen naar jouw wensen. Je kiest voor een nieuw theme en voegt functionaliteiten toe met plugins. Het installeren van deze themes en plugins zorgt voor een foutmelding: WordPress heeft immers niet de rechten om de bronbestanden van de themes of plugins op de server te plaatsen.
Ook hier lonkt de snelle en gemakkelijke oplossing waarbij schrijfrechten op alle directories en bestanden worden gegeven. Dit zorgt er in ieder geval voor dat WordPress de themes en plugins kan installeren en updaten en voorkomt nieuwe foutmeldingen.
Naast de risico’s die genoemd zijn bij de installatie, brengt het gebruik van plugins en themes nieuwe risico’s aan het licht, zoals:
- Niet elke plugin- of themeleverancier is even snel in het doorvoeren van beveiligingsupdates. De beveiliging van de applicatie is afhankelijk van de developmentsnelheid van meerdere leveranciers.
- Er zijn meer locaties waar malafide scripts zich kunnen verstoppen.
Op een veilige manier plugins en themes beheren
WordPress ondersteunt het installeren van themes en plugins, net als het onderhouden van de core-applicatie, via SSH. Met SSH kan je jouw applicatie op een veiligere manier beheren. Zo kun je een veiligere WordPress-omgeving opzetten. Door de installatie en het onderhoud via SSH uit te voeren kunnen de werkzaamheden onder een andere systeemgebruiker dan WordPress zelf krijgt worden uitgevoerd. Zo is het aan te raden om als SSH gebruiker jouw eigen beheersgebruiker op te geven. Dit maakt updaten makkelijk, want WordPress regelt de handelingen voor je, en veilig, want WordPress kan enkel schrijven in de applicatiecode wanneer jij daar voor kiest.
Bij het installeren of updaten van een plugin of theme, of bij het updaten van de WordPress-core, vraagt de interface een gebruikersnaam, wachtwoord en connectiemethode. Inloggen via SSH is hierbij het veiligst. Kies voor het updaten via SSH en geef de gebruikersnaam en het SSH wachtwoord op.
Hiermee behoud je de controle wanneer WordPress aanpassingen maakt in de applicatie-code en voorkom je dat bij een hack de applicatiecode wordt geïnfecteerd.
3. Meer plugins is meer functionaliteit
WordPress plugins bieden extra functionaliteit binnen de applicatie. Zo worden plugins gebruikt om de SEO-waarde van de artikelen te verbeteren, om beveiligingstweaks door te voeren, afbeeldingen in een mooie gallery weer te geven of van de blog een webshop te maken. Plugins maken jouw site uniek en zorgen er voor dat jouw bezoeker ziet en doet wat jij wilt. De WordPress Plugin Codex staat vol met extra en nuttige functionaliteit.
Een plugin introduceert ook veiligheidsrisico’s en prestatieverslechteringen.
- Meer plugins betekent ook meer applicatiecode waarin een fout kan zitten. De kans dat er op een manier misbruik gemaakt kan worden van de applicatie neemt hierdoor toe.
- De meeste WordPress-sites worden gehackt door programmeerfouten in themes en plugins die niet op tijd worden geüpdatet. Programmeurs hebben het bijwerken van hun plugins of themes, testen of wijzigingen veilig zijn en het dichten van lekken niet altijd als hoogste prioriteit. Bijvoorbeeld omdat het onderhouden van de plugin een hobby- of zijproject is voor de programmeur.
- De impact van plugins op prestaties is niet te onderschatten. Zo willen plugins wel eens om onduidelijke redenen cookies introduceren, wat in de weg kan gaan zitten met caching waardoor de schaalbaarheid van de applicatie onder grote bezoekersaantallen afneemt.
- Sommige plugins maken soms gebruik van eigen CSS-bestanden en Javascripts. Dit zorgt voor extra requests naar de server wat extra dataverkeer oplevert en de webserver bezig houdt.
- Niet alle plugins zijn geschreven om gebruikt te worden in een omgeving waar prestaties tellen. Zij maken bijvoorbeeld gebruik van inefficiënte databasequeries die slecht schalen bij grote datasets.
Minder plugins betekent dat er minder code wordt uitgevoerd, minder mogelijk onveilige code in de applicatie aanwezig is en dat de druk op het systeem en de database afneemt. Controleer bij elke plugin of de functionaliteit die de plugin biedt nodig is en meerwaarde biedt. Goed onderzoek naar de betrouwbaarheid van de plugin is daarnaast ook aan te raden. Bekijk hierbij bijvoorbeeld naar de update-historie en hoe actief er gereageerd wordt op feedback.
Prestaties verhogen door trage plugins te vermijden
Het vaststellen welke plugin vertraging veroorzaakt is niet altijd even eenvoudig. De simpele manier laat meteen goed het verschil zien tussen een magere WordPress en de tragere plugin. Deactiveer alle plugins en controleer de site op een aantal verschillende pagina’s om de prestaties te vergelijken. Vervolgens activeer je plugins één voor één terwijl je de reactietijden in de gaten houdt. Verschillende browsertools kunnen inzicht bieden in de laadtijden van de website en kunnen verschillen in miliseconden inzichtelijk maken.
Een andere wijze om de impact van plugins in kaart te brengen is de P3 Plugin Performance Profiler-Plugin. Deze plugin brengt in kaart welke elementen onderdeel zijn van de laadtijd van WordPress. Helaas wordt de plugin P3 Plugin Performance Profiler niet langer bijgehouden door de maker. Hierdoor is de werking van de plugin met recente WordPress-ontwikkelingen niet langer te waarborgen en is ook de veiligheid van de plugin niet langer gegarandeerd.
Tenslotte is het mogelijk om de logs die de server bijhoudt te gebruiken om trage processen te identificeren. Zo bevat een access-log mogelijk alle requests die niet gevonden kunnen worden (http statuscode 404) waarvan bekend is dat deze een zware impact hebben op systeemresources. Het is vaak mogelijk lang-lopende php-processen te loggen. Dit logbestand kan aangeven welke processen er lang over doen en dus veel systeemresources verbruiken. Ook is het mogelijk om langlopende MySQL queries te loggen welke een hint kunnen geven van welke databaserequests niet efficiënt worden uitgevoerd.
4. WordPress reacties laten afhandelen
Met WordPress is het makkelijk een interactieve ervaring aan jouw website-bezoekers te bieden. Niet alleen door een mooie vormgeving en actuele content, maar juist door jouw bezoeker te laten reageren op jouw artikelen. Reageren op jouw website zorgt er ook voor dat bezoekers opdrachten naar jouw server kunnen sturen. Deze moeten uiteraard door de server worden verwerkt. De server is hiermee gevoelig voor een aantal negatieve gevolgen.
- De reputatie van de website kan negatief benadeeld worden.
Reacties op oude artikelen worden ook vaak gebruikt voor “comment-spam”, waarbij SEO-teksten en verwijzingen naar allerlei sites worden geplaatst zodat de reputatie van de site kunstmatig stijgt. Robots zoeken geautomatiseerd naar WordPress-sites waar commentaar is toegestaan en reageren op de oude artikelen in de hoop dat de blog niet langer wordt bijgehouden. - Het plaatsen van dit soort comments zorgt voor overlast op de site, maar ook voor een hogere belasting op de server. Ieder comment dat geplaatst wordt vereist een database-handeling.
- Elke keer dat een artikel geladen wordt, moeten ook de reacties geladen worden. Elke keer dat de pagina moet worden weergegeven, moeten ook comments worden opgevraagd en geladen. Hiermee geef je de controle over de opbouw van de pagina en hoeveel data er aan de hand van databaserequests moet worden geladen deels uit handen. Als er veel comments verschijnen kan dit de laadtijd verlengen.
- Comments maken het toepassen van optimalisatietechnieken zoals caching moeilijker omdat de inhoud van de pagina vaker verandert.
Jouw site is veiliger als je reacties laat afhandelen door experts
Een veilige manier om toch interactie toe te laten op de site in de vorm van reacties, waarbij de siteprestaties toch goed onder de duim te houden zijn, is het kiezen van een externe reactie-afhandelaar. Door de reacties client-side van de externe locatie in te laden wordt de server waar de site op staat niet overmatig belast. Laadtijden blijven snel en reacties worden vaak achteraf geladen. Daarnaast is bij de dienst vaak ook spamfiltering inbegrepen. Het is voor gebruikers makkelijker als ze al hun reacties op verschillende sites via één aanbieder kunnen volgen. Denk bijvoorbeeld aan Disqus of Facebook Comments.
5. Alles open laten staan, voor als het ooit nodig is
Een verse installatie van WordPress heeft zoveel mogelijk functionaliteiten beschikbaar en bereikbaar. Een gezonde vervolgstap is het controleren van de mate waarop er toegang is tot gevoelige onderdelen van de applicatie. Deze moeten ingeperkt worden. Hierbij kijk je naar jouw eigen situatie en op welke manier je beveiligingsmaatregelen wilt treffen. Elke beperking kan er op een ander moment voor zorgen dat iets niet beschikbaar is. Een afgewogen beslissing biedt voldoende veiligheid en mogelijke flexibiliteit.
- De administratie-interface, bereikbaar via /wp-admin, is gevoelig voor brute-force aanvallen waardoor bestaande accounts worden gebruikt voor malafide doeleinden.
- De WordPress-api XML-RPC is een relatief zwaar proces en kan misbruikt worden om de prestaties van de site te verzwaren of geautomatiseerd gegevens uit te lezen.
- De uploads die WordPress-gebruikers kunnen plaatsen bevatten mogelijk malafide code. De uploads-map is beschrijfbaar voor de applicatie en er is het minst controle op de inhoud van de map.
Deze veiligheidsrisico’s en prestatierisico’s kunnen beperkt worden door deze bestanden niet of beperkt toegankelijk te maken. In dit artikel wordt uitgelegd hoe een toegangsbeperking op bestanden in te stellen.
/wp-admin
Inloggen op de administratie-interface is meestal voorbehouden aan geverifieerde gebruikers. In veel gevallen is het inloggen op de administratie-interface ook locatie-gebonden: dit gebeurt bijvoorbeeld voornamelijk van kantoor of vanuit huis.
Om te voorkomen dat kwaadwillenden succesvol brute-force-aanvallen kunnen uitvoeren is het mogelijk een ip-restrictie toe te passen op de administratie-interface. Hiermee ontneem je deze kwaadwillenden de kans om het zelfs te proberen: als het IP-adres niet bekend is krijg je geen toegang tot het inlogscherm. Middels een simpele serverconfiguratie-aanpassing is het mogelijk om enkel verzoeken naar /wp-admin te accepteren van bekende IP-adressen.
XML-RPC
WordPress heeft een API waarmee externe programma’s verbindingen kunnen opzetten met WordPress. Dit wordt gebruikt door programma’s om bijvoorbeeld een post te plaatsen vanaf een werkstation of de WordPress-app op een mobiele telefoon. Maar ook bepaalde plugins gebruiken de API om de handelingen binnen WordPress uit te voeren.
Het is verstandig om te controleren hoe waarschijnlijk het is dat jouw applicatie gebruik maakt van de API. Ontzeggen of beperken van de toegang tot de XML-RPC API kan er voor zorgen dat de applicatie minder kwetsbaar is voor resource-intensieve verzoeken. De auteurs van de security-plugin Wordfence zijn niet overigens overtuigd of blokkeren van XML-RPC de beste oplossing is. In specifieke gevallen kan het blokkeren van de toegang tot de API een effectieve manier zijn om mogelijke kwetsbaarheden binnen de applicatie te minimaliseren.
Uploads
WordPress staat gebruikers toe bestanden te uploaden. In onze veilige installatie hebben we toegestaan dat WordPress bestanden mag uploaden in de /wp-content/uploads-map. Gebruikers mogen enkel attachments uploaden zoals afbeeldingen of pdf-bestanden. WordPress maakt het niet mogelijk om door de server uitvoerbare bestanden zoals php-bestanden te uploaden. In principe komen er dus geen php-bestanden in de uploads-map.
Als we deze logica doortrekken kunnen we ook vaststellen dat er geen php-bestanden horen binnen de uploads-map. Blokkeer daarom preventief de aanroep van uitvoerbare bestanden in de uploads-map.
Werken met een snelle en veilig WordPress-site
Dat WordPress met standaard instellingen goed werkt maakt het beginnen van een website makkelijker. Maar wanneer prestaties en veiligheid essentieel worden is het belangrijk om na te denken over de beste werkwijze. Dat houdt in dat functionaliteiten beperkt moeten worden en dat elke systeemaanpassing goed doordacht moet worden. Met deze vijf tips neem je de controle over jouw WordPress-site in handen en kan je kiezen voor een stabiele en veilige website.
E-book: Security & compliance voor digitale organisaties
Wereldwijd nemen digitale aanvallen in rap tempo toe en de nieuwe privacywet staat voor de deur. In dit e-book lees en leer je:
- praktische tips voor betere websecurity;
- wat de privacywet betekent voor webbouwers;
- wat je van een hostingprovider mag verwachten.