Kort antwoord
De veiligste websites zijn de websites met het kleinste aanvalsoppervlak: weinig externe code, geen onnodige plugins, geen openbare inlogpagina en geen database die niet nodig is. Voeg daar beveiligingsheaders, veilige formulieren en HTTPS aan toe, en je hebt een website die veilig is en nauwelijks onderhoud vraagt.
Waarom worden websites eigenlijk gehackt?
De meeste aanvallen zijn niet persoonlijk. Geautomatiseerde bots scannen continu het internet op bekende kwetsbaarheden: verouderde plugins, standaard inlogpagina's en zwakke wachtwoorden. Je website hoeft dus niet "interessant" te zijn om een doelwit te worden. Hij moet alleen een bekende zwakke plek hebben.
De gevolgen kunnen ernstig zijn: een website die malware verspreidt, spam die in je naam wordt verstuurd, een waarschuwing in Google of het kwijtraken van gegevens van klanten.
Het plugin-probleem
Elke plugin of externe bibliotheek die je toevoegt, is code van iemand anders die jij moet vertrouwen. Heeft die code een kwetsbaarheid of wordt hij niet meer bijgewerkt, dan wordt jouw website het slachtoffer. Bij systemen als WordPress zit het overgrote deel van de gemelde kwetsbaarheden in plugins en thema's, niet in de kern. Hoe dat zich verhoudt tot maatwerk lees je in maatwerk website vs. WordPress.
Mijn uitgangspunt is daarom: alleen toevoegen wat echt nodig is. Elke regel code die er niet is, kan ook niet worden misbruikt.
Onderhoudsarm bouwen: minder is meer
Onderhoudsarm betekent niet dat een website niet veilig hoeft te zijn. Het betekent dat veiligheid in het ontwerp is ingebouwd, zodat je niet elke week updates hoeft te doen. Dit zijn de principes waarmee ik werk:
- Weinig afhankelijkheden. Geen stapel plugins die allemaal bijgewerkt moeten worden.
- Geen onnodige database of beheeromgeving. Waar mogelijk bestaat de website uit statische bestanden, die van nature veel moeilijker aan te vallen zijn.
- Gecontroleerde externe diensten. Voor formulieren en e-mail gebruik ik betrouwbare diensten in plaats van zelfgebouwde, kwetsbare scripts.
- Versiebeheer. Elke wijziging wordt vastgelegd, zodat een eerdere versie altijd snel terug te zetten is.
Beveiligingsheaders: onzichtbaar maar krachtig
Beveiligingsheaders zijn instructies die de server meestuurt en die de browser vertellen hoe hij je website veilig moet behandelen. Ze kosten niets aan snelheid en blokkeren hele categorieën aanvallen. Mijn eigen website gebruikt deze headers ook.
| Header | Wat het doet |
|---|---|
| Strict-Transport-Security (HSTS) | Dwingt een beveiligde HTTPS-verbinding af |
| Content-Security-Policy (CSP) | Bepaalt welke scripts, stijlen en afbeeldingen mogen laden, en beperkt zo XSS-aanvallen |
| X-Frame-Options | Voorkomt dat je website in een frame op een andere site wordt geladen (clickjacking) |
| X-Content-Type-Options | Voorkomt dat de browser bestandstypen verkeerd interpreteert |
| Referrer-Policy | Beperkt welke gegevens met andere websites worden gedeeld |
| Permissions-Policy | Schakelt browserfuncties uit die je niet nodig hebt, zoals camera of locatie |
Je kunt je eigen headers controleren met een gratis tool als securityheaders.com.
Veilige formulieren en privacy
Een contactformulier is vaak het enige "invoerpunt" van een bedrijfswebsite, en dus het belangrijkste aandachtspunt:
- Validatie. Invoer wordt gecontroleerd op het juiste formaat en de juiste lengte, ook aan de serverkant. Client-side controle alleen is niet genoeg.
- Spambescherming. Onzichtbare honeypot-velden en limieten houden bots buiten zonder je bezoekers lastig te vallen met moeilijke puzzels.
- Dataminimalisatie. Vraag alleen wat je nodig hebt. Wat je niet verzamelt, kan niet gelekt worden. Dat past ook bij de AVG.
- Duidelijke privacyverklaring. Bezoekers weten wat er met hun gegevens gebeurt. Zie bijvoorbeeld mijn privacybeleid.
Wat je zelf in de gaten moet houden
Ook een onderhoudsarme website heeft een paar vaste aandachtspunten. Dit is de checklist:
- Domein verlengen. Een verlopen domein is een van de duurste en meest voorkomende fouten. Zet automatische verlenging aan.
- Sterke wachtwoorden en tweestapsverificatie op je domeinregistratie, hosting en e-mail.
- Actuele contactgegevens en inhoud. Verouderde informatie schaadt je betrouwbaarheid.
- Uptime-monitor. Een gratis dienst die een melding stuurt als je website niet bereikbaar is.
- Back-up of versiebeheer van alle bestanden, zodat herstel snel gaat.
Bij mijn pakketten is er na oplevering een periode gratis onderhoud, en daarna kun je kiezen voor een onderhoudsabonnement of losse aanpassingen. Wat dat kost? Zie wat een website kost.