← Alle checks
BeveiligingTypische ernst: Laag

Scanner voor lekken in headers

Detecteert headers zoals X-Powered-By of Server die je techstack en versie aan aanvallers verraden.

Wat het checkt

Deze scanner zoekt naar responsheaders zoals X-Powered-By of Server die verraden welke technologie en versie je site draait. Hij meldt wanneer de server te veel over zijn binnenkant prijsgeeft. Dit is informatie die de bezoeker niets oplevert, maar een aanvaller juist veel.

Waarom het belangrijk is

Als een aanvaller je framework en de exacte versie kent, kan hij bekende kwetsbaarheden voor precies die versie opzoeken. Dat bespaart hem verkenningswerk en maakt je site een makkelijker doelwit. Op zichzelf is het geen ernstig lek, maar het voegt onnodig risico toe.

Hoe je het oplost

Stel je server of framework zo in dat deze informatieve headers uit de responses worden verwijderd of verborgen. Veel platforms bieden een optie van één regel om de technologieheader uit te zetten. Het is een snelle aanpassing die de hoeveelheid blootgestelde informatie beperkt.

Hoe deze controle werkt

Scanaris leest de headers van het hoofdantwoord van je pagina en kijkt naar twee in het bijzonder. Staat X-Powered-By erin met welke waarde dan ook (bijvoorbeeld Express, PHP/8.2.12 of Next.js), dan opent hij een bevinding met lage ernst. Staat Server erin en bevat de waarde een versienummer (iets als nginx/1.18.0 of Apache/2.4.57), dan opent hij er nog een. Een kale Server: nginx of Server: cloudflare wordt niet gemeld: zeggen welke server je gebruikt is geen probleem; zeggen welke versie precies, wel.

Waarom dit belangrijk is

Geen van beide headers doet iets voor de gebruiker of de browser. Ze bestaan uit gewoonte. Wat ze wel doen, is werk besparen voor wie een kwetsbaarheid zoekt: met PHP/7.4.3 of Apache/2.4.49 in het antwoord hoeft de aanvaller niets te raden, hij gaat rechtstreeks naar de lijst met bekende fouten van die versie en probeert die met een publieke exploit. Het is een bevinding met lage ernst omdat het op zichzelf geen deur opent; maar het is een van de makkelijkste om te sluiten, en massascanners filteren hun doelwitten precies op deze headers.

Hoe je ze verwijdert, per stack

  • Express: app.disable('x-powered-by') bij het aanmaken van de app, of gebruik helmet(), dat hem samen met andere verhardingen verwijdert.
  • Next.js: stuurt standaard X-Powered-By: Next.js. In next.config.js: poweredByHeader: false.
  • PHP: in php.ini, expose_php = Off. Bij shared hosting kan dit meestal via het paneel of met een .user.ini.
  • ASP.NET: in web.config, binnen customHeaders, <remove name="X-Powered-By" />, en in IIS schakel je ook de header X-AspNet-Version uit met enableVersionHeader="false".
  • nginx: server_tokens off; in het http-blok. Het zegt nog steeds "nginx", maar zonder versie.
  • Apache: ServerTokens Prod en ServerSignature Off in de hoofdconfiguratie. Met Prod wordt de header gewoon Apache.
  • Vercel, Netlify, Cloudflare Pages: sturen geen versie in Server. Zie je daar X-Powered-By, dan komt dat van je framework (Next.js of Express), niet van het platform.

Heb je een proxy of CDN ervoor (Cloudflare, een load balancer), controleer dan het openbare antwoord: soms vervangt de proxy de Server-header en verdwijnt het probleem vanzelf, maar X-Powered-By gaat er meestal ongewijzigd doorheen.

Controleer of het opgelost is

curl -sI https://jouwdomein.nl | grep -iE "^(server|x-powered-by):"

Ideaal is dat X-Powered-By niet verschijnt en dat Server, als hij verschijnt, geen nummer bevat. Probeer ook een API-route of een foutpagina (een URL die niet bestaat): fouten worden soms in een andere laag gegenereerd die de header weer toevoegt.

Veelgestelde vragen

De versie verbergen lost de kwetsbaarheid niet op. Wat is het nut?

Niet op de eerste resultatenpagina staan van wie slachtoffers zoekt. Je hebt gelijk dat de echte oplossing updaten is: de versie verbergen is de aanvulling, niet de vervanging. Beide samen kosten vijf minuten.

Mijn hoster laat me de serverconfiguratie niet aanpassen.

Verwijder dan in elk geval X-Powered-By vanuit je code of je .htaccess (Header unset X-Powered-By) en vraag de hoster de versie te verbergen. De andere beveiligingsheaders, die je wel moet hebben, worden nagekeken door de controle beveiligingsheaders.

Waarom wordt "Server: cloudflare" niet gemeld?

Omdat het niets bruikbaars onthult: geen versie en geen specifieke software erachter. Waar deze controle naar zoekt, is informatie die de weg naar een exploit verkort. Welke headers de moeite waard zijn en welke alleen ruis, staat in HTTP-headers uitgelegd voor mensen.

Check het op je site

Scan je site gratis en zie of deze en 44 andere checks slagen, met een fixprompt voor elk probleem.

Mijn site gratis scannen

Gerelateerde checks