Hoe werkt de check?

Je vult een websiteadres in. Wij vragen daarna de homepage op, zoals een browser dat doet, en lezen de openbare DNS-gegevens van het domein, zoals een mailserver dat doet. Uit de antwoorden halen we 15 instellingen die bepalen hoe goed je website en e-mail beschermd zijn.

Wat we niet doen: inloggen, formulieren invullen, wachtwoorden proberen of op een andere manier proberen binnen te komen. Daardoor zien we ook niet alles: verouderde plug-ins, zwakke wachtwoorden en fouten in de code vallen buiten deze check. Een hoog cijfer is dus een goede basis, geen garantie.

Je software: draait je site op WordPress, dan vergelijken we de versie met de officiële lijst van wordpress.org. Die lijst halen we in z'n geheel op; wordpress.org ziet dus niet welke site we controleren.

Het cijfer is een rapportcijfer van 1 tot 10. Belangrijke onderdelen, zoals een beveiligde verbinding en e-mailbeveiliging, tellen zwaarder mee. Wat we niet konden controleren telt niet mee. Werkt de beveiligde verbinding niet, dan is het cijfer hooguit een 4. Draait je site op software met bekende beveiligingslekken, dan hooguit een 5,4.

De 15 controles

Beveiligde verbinding

In gewone taal

Zonder beveiligde verbinding kan alles wat bezoekers invullen, zoals contactgegevens of wachtwoorden, onderweg worden meegelezen of veranderd. Browsers zetten dan “Niet veilig” naast je adres, en dat kost vertrouwen en bezoekers.

Wat te doen: Vraag je hostingpartij om een (gratis) certificaat te activeren. Bij de meeste hosters is dat één vinkje.

Voor je developer · HTTPS / TLS

TLS versleutelt en authenticeert het verkeer tussen browser en server. Zonder geldig certificaat voor de hostnaam is er geen vertrouwelijkheid of integriteit, en tonen browsers een waarschuwing.

Installeer een geldig certificaat voor jouwbedrijf.nl (bijv. Let's Encrypt via ACME/certbot, of de optie in je hostingpanel)
en controleer dat de volledige certificaatketen wordt meegestuurd.

Doorsturen naar de beveiligde versie

In gewone taal

Oude links, visitekaartjes en mensen die je adres zelf intypen komen soms binnen via de onbeveiligde variant (http://). Stuurt je site ze niet automatisch door, dan gebruiken ze je site zonder slotje.

Wat te doen: Vraag je webbouwer of hoster om “HTTPS forceren” aan te zetten.

Voor je developer · HTTP → HTTPS-redirect

Verzoeken op poort 80 horen met een permanente redirect (301 of 308) naar de HTTPS-URL te gaan, zodat er nooit inhoud over onversleuteld HTTP wordt geserveerd.

Stuur alle http://-verzoeken met een 301 door. Bijvoorbeeld in nginx:

server {
  listen 80;
  server_name jouwbedrijf.nl;
  return 301 https://$host$request_uri;
}

Browser onthoudt: altijd beveiligd

In gewone taal

Ook met doorsturen is het allereerste moment van een bezoek heel even onbeveiligd. Op openbare wifi kan een aanvaller precies dat moment misbruiken. Met deze instelling onthoudt de browser dat je site alléén beveiligd geopend mag worden.

Wat te doen: Vraag je webbouwer om HSTS aan te zetten, zodra alles op je site via https werkt.

Voor je developer · HSTS (Strict-Transport-Security)

De Strict-Transport-Security-header laat de browser voor de duur van max-age uitsluitend HTTPS gebruiken voor deze host. Dat voorkomt SSL-stripping. Advies: max-age van minimaal 180 dagen, liefst een jaar.

Strict-Transport-Security: max-age=31536000; includeSubDomains

(Voeg includeSubDomains alleen toe als álle subdomeinen HTTPS ondersteunen.)

Alles op je pagina laadt beveiligd

In gewone taal

Ook als je site zelf beveiligd is, kan een pagina losse onderdelen zoals scripts, opmaak of een formulier via een onbeveiligde verbinding laden. Browsers blokkeren die onderdelen, waardoor je site er kapot uit kan zien, of ze waarschuwen je bezoekers.

Wat te doen: Vraag je webbouwer om alle adressen in je site van http:// naar https:// te zetten.

Voor je developer · Mixed content

Actieve mixed content (scripts, stylesheets, iframes) wordt door browsers geblokkeerd, en een formulier dat naar http:// post geeft een waarschuwing. De CSP-directive upgrade-insecure-requests laat de browser zulke verzoeken automatisch via https doen.

Vervang http://-URL's door https:// (of relatieve URL's), en zet eventueel als vangnet:

Content-Security-Policy: upgrade-insecure-requests

Bescherming tegen kwaadaardige scripts

In gewone taal

Als iemand via een lek of een gehackte plug-in code op je site krijgt, kan die bijvoorbeeld betaal- of inloggegevens van je bezoekers stelen. Een CSP is een lijst van bronnen die je site mag gebruiken; de browser blokkeert al het andere.

Wat te doen: Laat je webbouwer een beleid opstellen. Dat kan eerst in testmodus, zodat er niets stukgaat.

Voor je developer · Content-Security-Policy (CSP)

CSP bepaalt waar scripts, styles en frames vandaan mogen komen en is de belangrijkste verdediging tegen XSS. Zonder script-src/default-src, met wildcards, of met 'unsafe-inline' zonder nonce of hash biedt het weinig bescherming.

Begin met Content-Security-Policy-Report-Only, verhelp de meldingen en zet het daarna aan, bijv.:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'

Je site kan niet stiekem worden ingesloten

In gewone taal

Een kwaadwillende site kan jouw pagina onzichtbaar over zijn eigen pagina leggen. Bezoekers denken dat ze daar klikken, maar bevestigen in werkelijkheid iets op jouw site.

Wat te doen: Vraag je webbouwer om insluiten door andere websites te blokkeren.

Voor je developer · Clickjacking (X-Frame-Options / frame-ancestors)

Zonder X-Frame-Options of CSP frame-ancestors kan elke website je pagina in een iframe laden (clickjacking / UI-redressing).

Content-Security-Policy: frame-ancestors 'self'

(of de oudere header: X-Frame-Options: SAMEORIGIN)

Bestanden worden niet verkeerd gelezen

In gewone taal

Browsers raden soms zelf wat voor bestand iets is. Een aanvaller kan dat misbruiken, bijvoorbeeld door een geüpload plaatje als programmacode te laten uitvoeren. Eén regel instelling voorkomt dat.

Wat te doen: Vraag je webbouwer deze ene instelling toe te voegen. Er gaat niets door stuk.

Voor je developer · X-Content-Type-Options: nosniff

nosniff zet MIME-sniffing uit, zodat de browser het opgegeven Content-Type volgt. Zo worden uploads of verkeerd getypeerde responses niet als script of stylesheet uitgevoerd.

X-Content-Type-Options: nosniff

Je websitesoftware is bijgewerkt

In gewone taal

De meeste gehackte websites draaien op verouderde software. Zodra er een lek in bijvoorbeeld WordPress bekend wordt, zoeken aanvallers automatisch naar sites die de update nog niet hebben. Bijwerken is de belangrijkste beveiliging die er is.

Wat te doen: Vraag je webbouwer om je website bij te werken (eerst een back-up), en spreek af wie dat voortaan elke maand doet.

Voor je developer · CMS-versie (WordPress, Joomla, Drupal …)

We herkennen het CMS aan de HTML van je homepage. Voor WordPress lezen we de core-versie uit de generator-tag of de core-assets en vergelijken die met de officiële lijst van wordpress.org (latest, outdated of insecure). Plug-ins en thema's controleren we niet: hun ?ver= zegt te weinig.

WordPress: Dashboard → Updates → Nu bijwerken (eerst een back-up), of met WP-CLI:

wp core update && wp plugin update --all && wp theme update --all

Laat automatische beveiligingsupdates aanstaan en houd plug-ins en thema’s ook bij.

Je site verklapt geen softwareversies

In gewone taal

Als je site laat zien welke software en welke versie hij draait, zien aanvallers in één oogopslag of er bekende lekken in zitten. Verbergen lost geen lek op, maar maakt je minder makkelijk vindbaar voor geautomatiseerde aanvallen.

Wat te doen: Vraag je webbouwer om versienummers te verbergen. En belangrijker: houd je software en plug-ins up-to-date.

Voor je developer · Versie-informatie in headers en HTML

Headers als Server en X-Powered-By, of <meta name="generator">, met versienummers maken fingerprinting en gerichte exploitatie eenvoudiger. Patchen blijft de echte oplossing.

nginx:     server_tokens off;
Apache:    ServerTokens Prod  en  ServerSignature Off
PHP:       expose_php = Off
WordPress: remove_action('wp_head', 'wp_generator');

Cookies worden veilig verstuurd

In gewone taal

Cookies onthouden bijvoorbeeld wie er is ingelogd. Zonder de juiste instellingen kunnen ze via een onbeveiligde verbinding of een kwaadaardig script worden onderschept, waarmee iemand een account kan overnemen.

Wat te doen: Vraag je webbouwer om alle cookies als “Secure” te markeren, en inlogcookies ook als “HttpOnly”.

Voor je developer · Cookie-attributen (Secure, HttpOnly)

Cookies zonder Secure kunnen over HTTP lekken. Sessiecookies zonder HttpOnly zijn via JavaScript uit te lezen (bij XSS). SameSite beperkt daarnaast CSRF.

Set-Cookie: naam=waarde; Path=/; Secure; HttpOnly; SameSite=Lax

Vastgelegd wie namens jou mag mailen

In gewone taal

Zonder deze regel kan iedereen e-mail versturen die van jouw domein lijkt te komen, bijvoorbeeld nepfacturen aan je klanten. Ook belanden je eigen mails sneller in de spam.

Wat te doen: Vraag je e-mail- of domeinbeheerder om een SPF-record. Gebruik je geen e-mail op dit domein? Leg dan juist vast dat níemand namens het domein mag mailen.

Voor je developer · SPF-record

Het SPF-record (TXT, “v=spf1 …”) somt de servers op die mail mogen versturen voor dit domein. Ontvangende mailservers gebruiken het samen met DKIM en DMARC om spoofing te herkennen.

jouwbedrijf.nl  TXT  "v=spf1 include:<je-mailprovider> -all"

Microsoft 365:  include:spf.protection.outlook.com
Google:         include:_spf.google.com
Geen mail:      "v=spf1 -all"

Je mail draagt een digitale handtekening

In gewone taal

Met DKIM zet je mailprovider een digitale handtekening onder elke mail die je verstuurt. Ontvangers zien daaraan dat de mail echt van jou komt en onderweg niet is veranderd. Zonder handtekening belandt je mail sneller in de spam, en werkt DMARC minder goed.

Wat te doen: Vraag je mailbeheerder om DKIM aan te zetten. Bij de meeste mailproviders is dat een instelling plus één of twee regels in je DNS.

Voor je developer · DKIM

DKIM (RFC 6376) ondertekent uitgaande mail; het publieke deel van de sleutel staat in DNS op <selector>._domainkey.<domein>. Gmail, Yahoo en Outlook.com eisen voor grote afzenders SPF én DKIM, met DMARC. Van buitenaf kunnen we alleen de gebruikelijke selectors proberen: de naam kiest je mailprovider.

Zet DKIM-ondertekening aan bij je mailprovider en publiceer het record dat die je geeft, bijvoorbeeld:

<selector>._domainkey.jouwbedrijf.nl  TXT  "v=DKIM1; k=rsa; p=<publieke sleutel>"

(of een CNAME naar je provider)

Nepmail uit jouw naam wordt tegengehouden

In gewone taal

DMARC vertelt mailservers wat ze moeten doen met mail die zich voordoet als jouw bedrijf maar niet van jou komt: doorlaten, in de spam zetten of weigeren. Zonder streng beleid komt phishing uit jouw naam gewoon aan.

Wat te doen: Vraag je mailbeheerder om DMARC in te stellen: eerst een paar weken meten, daarna stap voor stap naar “quarantine” of “reject”.

Voor je developer · DMARC-beleid

DMARC koppelt de SPF- en DKIM-uitkomst aan het From-domein en bepaalt het beleid: none (alleen meten), quarantine of reject. Met rua ontvang je rapporten over wie namens je domein mailt.

_dmarc.jouwbedrijf.nl  TXT  "v=DMARC1; p=quarantine; rua=mailto:dmarc@jouwbedrijf.nl"

Begin eventueel met p=none, lees de rua-rapporten en verhoog daarna naar quarantine en reject.

Je domeingegevens zijn ondertekend

In gewone taal

DNS is het adresboek van internet: het vertelt computers waar je website en mail te vinden zijn. DNSSEC zet een digitale handtekening op die gegevens, zodat niemand bezoekers of mail ongemerkt naar een verkeerd adres kan sturen.

Wat te doen: Vraag je domeinregistrar of hoster om DNSSEC aan te zetten. Bij veel Nederlandse providers is dat een vinkje.

Voor je developer · DNSSEC

DNSSEC ondertekent DNS-records, zodat resolvers vervalste antwoorden (cache poisoning, spoofing) herkennen. We kijken of de validerende resolver 1.1.1.1 de AD-vlag (authenticated data) zet.

Activeer DNSSEC bij je DNS-provider en zorg dat het DS-record bij de registry staat (voor .nl: via je registrar bij SIDN).
Controleren:  dig +dnssec jouwbedrijf.nl SOA

Mensen weten waar ze een lek kunnen melden

In gewone taal

Vindt iemand een beveiligingsprobleem op je site, dan wil je dat diegene het bij jóu meldt. Een klein bestand op een vaste plek vertelt waar dat kan. Het is een internationale standaard die ook internet.nl controleert.

Wat te doen: Laat een klein tekstbestand plaatsen met een e-mailadres voor meldingen. Dat is een paar minuten werk.

Voor je developer · security.txt (RFC 9116)

Een /.well-known/security.txt met ten minste Contact en Expires geeft onderzoekers een vast meldpunt voor coordinated vulnerability disclosure.

Plaats op https://jouwbedrijf.nl/.well-known/security.txt:

Contact: mailto:security@jouwbedrijf.nl
Expires: 2027-10-26T00:00:00Z
Preferred-Languages: nl, en