headeraudit.nl
← BlogPraktijkgids

Waarom je F-score in 10 minuten te fixen is

headeraudit.nl · leestijd 4 minuten

Een F op headeraudit.nl voelt als een grote klap, alsof de hele beveiliging van de site op de schop moet. In de praktijk zijn acht van de negen headers die wij controleren letterlijk één regel config op je webserver. Het negende — Content-Security-Policy — kost iets meer nadenken, maar zelfs daarvoor is een goede eerste versie in een paar minuten te schrijven.

De rekensom

headeraudit.nl weegt negen headers naar impact, samen goed voor 100 punten. Content-Security-Policy en Strict-Transport-Security wegen het zwaarst — logisch, want die twee blokkeren de aanvallen met de grootste impact (script-injectie en SSL-stripping). De overige zeven zijn allemaal 6 tot 10 punten, en stuk voor stuk een enkele header met een vaste, veilige standaardwaarde — geen maatwerk, geen risico op een kapotte site.

Bekijk per header hoeveel hij precies weegt en waarom op de headers-overzichtspagina.

De quick wins: zeven headers, één blok config

Deze zeven headers hebben geen site-specifieke afwegingen — de aanbevolen waarde is voor vrijwel elke site correct. Kopieer het blok, plak het in je serverconfig, klaar:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Resource-Policy "same-site" always;

Op Vercel gaat hetzelfde via vercel.json:

{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        { "key": "Strict-Transport-Security", "value": "max-age=31536000; includeSubDomains" },
        { "key": "X-Content-Type-Options", "value": "nosniff" },
        { "key": "X-Frame-Options", "value": "SAMEORIGIN" },
        { "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
        { "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=()" },
        { "key": "Cross-Origin-Opener-Policy", "value": "same-origin" },
        { "key": "Cross-Origin-Resource-Policy", "value": "same-site" }
      ]
    }
  ]
}

Wil je het per header los bekijken — inclusief Apache, Caddy en Next.js varianten — ga dan naar de bijbehorende paginas: HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, Cross-Origin-Opener-Policy en Cross-Origin-Resource-Policy.

Content-Security-Policy: de uitzondering

CSP is de enige header op de lijst die je niet blind kunt kopiëren — de juiste waarde hangt af van welke scripts, fonts en afbeeldingen jouw site laadt. Maar "site-specifiek" betekent niet "ingewikkeld". Een strikte basispolicy schrijf je in twee minuten:

default-src 'self';
script-src 'self';
style-src 'self';
object-src 'none';
base-uri 'self';
frame-ancestors 'self'

Zet die eerst als Content-Security-Policy-Report-Only live, bekijk een dag lang de violation reports in de browserconsole, voeg toe wat legitiem blijkt te ontbreken, en zet hem dan pas afdwingend. Het volledige stappenplan — inclusief nonces voor inline scripts — staat op de CSP-pagina.

Stappenplan: 10 minuten

  1. 0–2 min — Scan je site op headeraudit.nl en noteer welke headers ontbreken of "kan beter" scoren.
  2. 2–5 min — Kopieer het quick-win-blok hierboven naar je serverconfig (nginx, Apache, Caddy, Vercel of Next.js) voor elke ontbrekende header uit die lijst.
  3. 5–8 min — Schrijf de basis-CSP hierboven, zet hem als report-only live.
  4. 8–10 min — Herlaad je site, check de browserconsole op CSP-meldingen, en scan opnieuw.

De meeste sites gaan van een F naar een B of A in exact deze tien minuten — de resterende punten naar A+ zitten meestal in het verder aanscherpen van de CSP (nonces in plaats van report-only) en het aanmelden voor de HSTS preload list.

Test je site nu← Alle headers in detail
Waarom je F-score in 10 minuten te fixen is — headeraudit.nl