De meeste beveiligingslijsten op internet zijn opsommingen zonder rangorde. Twintig punten die er allemaal even belangrijk uitzien, waardoor u ofwel alles doet, ofwel niets. In de praktijk heeft u een middag, geen maand, en dan wilt u weten welke drie dingen het meeste opleveren.

Deze WordPress beveiliging checklist is daarom geordend op effect. Bovenaan staan de maatregelen die in onze ervaring de meeste inbraken voorkomen; onderaan staan de punten die netjes zijn maar zelden het verschil maken. Werk van boven naar beneden en stop waar uw tijd op is. U heeft dan het meeste binnengehaald.

Cruciaal: de punten 1 tot en met 6

1. Werk WordPress, thema’s en plugins bij. Verreweg de meeste gehackte sites die wij tegenkomen, zijn binnengekomen via een bekend lek in een verouderde plugin. Niet via een geniale aanvaller, maar via een script dat versienummers scant. Elke maand bijwerken is het minimum; kritieke beveiligingsupdates verdienen dezelfde week aandacht.

2. Verwijder wat u niet gebruikt. Een gedeactiveerde plugin staat nog steeds op de server en is nog steeds uit te buiten. Hetzelfde geldt voor ongebruikte thema’s. Deactiveren is niet verwijderen.

3. Zorg voor werkende back-ups buiten de server. Dit voorkomt geen hack, maar bepaalt of een hack een middagje kost of uw hele bedrijf raakt. Test één keer per jaar of terugzetten werkelijk lukt. Een back-up die u nooit heeft teruggezet, is een aanname.

4. Gebruik unieke, lange wachtwoorden. Voor elk beheerdersaccount, voor de database, voor FTP en voor het hostingpaneel. Hergebruikte wachtwoorden uit een oud datalek zijn nog altijd een van de meest voorkomende ingangen.

5. Zet tweestapsverificatie aan op beheerdersaccounts. Hiermee wordt een gestolen wachtwoord vrijwel waardeloos. Het kost uw team tien seconden extra per inlog en het haalt een hele categorie aanvallen weg.

6. Draai een ondersteunde PHP-versie. Een verouderde PHP-versie krijgt geen beveiligingsupdates meer en maakt uw site bovendien trager. Uw hostingpanel toont welke versie actief is; een upgrade doet u na een test, niet blind.

Belangrijk: de punten 7 tot en met 13

7. Beperk het aantal beheerders. Iedere beheerder is een sleutel die kwijt kan raken. Geef mensen de rol die bij hun taak past en trek toegang direct in bij vertrek.

8. Vervang voorspelbare gebruikersnamen. Een account dat “admin” heet, geeft aanvallers de helft van de combinatie cadeau. Hoe u dat zonder dataverlies oplost, leest u in het artikel over de admin-gebruikersnaam.

9. Limiteer inlogpogingen. Blokkeer een IP-adres tijdelijk na een handvol mislukte pogingen. Dit maakt geautomatiseerd gokken praktisch onhaalbaar en scheelt bovendien serverbelasting.

10. Zet een firewall vóór uw site. Een web application firewall filtert bekende aanvalspatronen voordat WordPress ze verwerkt. Dat geeft u lucht in de periode tussen het bekend worden van een lek en het moment waarop de update er is.

11. Installeer een geldig SSL-certificaat en dwing HTTPS af. Zonder versleuteling reizen inloggegevens en formulierinzendingen leesbaar over het netwerk. Controleer ook dat er geen onbeveiligde onderdelen achterblijven, anders blijft de browser waarschuwen.

12. Controleer waar uw plugins vandaan komen. Alleen uit de officiële map of rechtstreeks van de maker, met een geldige licentie. Gekraakte premium thema’s bevatten vrijwel altijd toegevoegde code, zoals wij beschrijven in het artikel over nulled thema's.

13. Beperk het uploaden van bestanden. Kunnen bezoekers via een formulier bestanden uploaden, sta dan alleen specifieke extensies toe en zorg dat er in de uploadsmap geen PHP kan worden uitgevoerd. Dit is een klassieke ingang.

Verstandig: de punten 14 tot en met 17

14. Houd bestandswijzigingen in de gaten. Een melding zodra een kernbestand of themabestand verandert, betekent dat u een injectie binnen uren opmerkt in plaats van pas als Google waarschuwt.

15. Schakel de bestandseditor in het beheer uit. Standaard kan iedere beheerder via de browser code aanpassen. Zet dat uit met een regel in wp-config.php; niemand hoort daar op die manier code te schrijven.

16. Zet de bestandsrechten juist. Mappen op 755, bestanden op 644, wp-config.php strakker. Nergens 777, ook niet tijdelijk om iets werkend te krijgen.

17. Beperk of blokkeer XML-RPC. Dit oude koppelvlak wordt zelden nog gebruikt, maar wel volop misbruikt om in één verzoek honderden wachtwoorden te proberen. Gebruikt u de WordPress-app of Jetpack, blokkeer het dan niet zomaar.

Afrondend: de punten 18 tot en met 20

18. Verberg onnodige informatie. Het WordPress-versienummer in de broncode, foutmeldingen die verklappen of een gebruikersnaam bestaat, PHP-fouten die zichtbaar zijn voor bezoekers. Dit stopt geen gerichte aanvaller, maar het maakt uw site minder makkelijk te selecteren.

19. Voeg beveiligingsheaders toe. Headers die aangeven hoe de browser met uw pagina om moet gaan, beperken de schade van bepaalde aanvallen. Nuttig, maar geen vervanging van de punten hierboven.

20. Leg vast wie wat doet. Wie voert de updates uit, wie controleert de back-ups, wie krijgt de melding als er iets misgaat en wie belt u buiten kantooruren? Beveiliging die van niemand is, gebeurt niet.

Een voorbeeld van hoe zo’n lijst uitpakt

Een installatiebedrijf in Apeldoorn liet ons hun site nakijken na een waarschuwing van hun hostingpartij. De lijst leverde het volgende op: WordPress liep zeven maanden achter, er stonden vier gedeactiveerde plugins waarvan één met een bekend lek, er waren vijf beheerders van wie er twee niet meer in dienst waren, en de back-ups stonden op dezelfde server. Wachtwoorden waren overigens keurig in orde, want daar had de vorige bouwer op gehamerd.

Wat opvalt: ze hadden het punt gedaan waar het meest over gepraat wordt, en de punten met het meeste effect laten liggen. Dat patroon zien wij vaker. De reparatie kostte een halve dag; het risico daarvoor was aanzienlijk groter dan iedereen dacht.

Wat u zelf doet en wanneer u hulp inschakelt

De punten 1 tot en met 9 kunt u met een beetje handigheid zelf. Ze vragen geen code, alleen aandacht en regelmaat. Voor de punten 10, 13, 15, 16, 17 en 19 komt u in configuratiebestanden en serverinstellingen terecht; als u daar onzeker over bent, kunt u de site slopen terwijl u hem probeert te beschermen. Laat dat dan doen.

Het lastigste is niet de eerste keer, maar het volhouden. Updates komen wekelijks, kwetsbaarheden worden dagelijks gemeld en back-ups vragen controle. Wilt u dat niet zelf bijhouden, dan is een vast abonnement een optie: bij ons zitten updates, firewall, scans, monitoring en back-ups in de doorlopende beveiliging, met een Nederlandstalig maandrapport zodat u ziet wat er gebeurd is. Loopt u tegen iets aan wat u niet vertrouwt, dan kunt u ons ook eenmalig laten kijken via een gratis websitecheck.

Begin vanavond met punt 1 tot en met 3. Daarmee dekt u het overgrote deel van wat er in de praktijk misgaat.