← Alle checks
BeveiligingTypische ernst: Laag

Headers voor origin-isolatie

Controleert of de headers COOP en CORP ontbreken die je site tegen cross-origin-aanvallen afschermen.

Wat het checkt

Deze scanner controleert of je site de origin-isolatieheaders COOP en CORP mist. Hij detecteert het ontbreken van deze headers die je pagina in de browser van andere origins scheiden.

Waarom het belangrijk is

Zonder deze headers is je pagina kwetsbaarder voor bepaalde cross-origin aanvallen waarbij een andere site probeert met de jouwe te interageren of gegevens te lezen die dat niet zou mogen. Origin-isolatie is een extra beschermingslaag die dat soort risico's verkleint.

Hoe je het oplost

Voeg de headers Cross-Origin-Opener-Policy en Cross-Origin-Resource-Policy toe in de configuratie van je server of CDN. Begin met voorzichtige waarden en controleer of je bronnen en integraties nog werken voordat je ze aanscherpt.

Hoe deze controle werkt

Scanaris kijkt in het hoofdantwoord van je pagina of twee headers aanwezig zijn: Cross-Origin-Opener-Policy (COOP) en Cross-Origin-Resource-Policy (CORP). Ontbreekt er een of ontbreken beide, dan opent hij één bevinding met lage ernst die aangeeft welke. Hij beoordeelt de waarde niet, alleen de aanwezigheid. Dit zijn de twee origin-isolatieheaders die het makkelijkst in te voeren zijn; de derde van de familie, Cross-Origin-Embedder-Policy, wordt niet vereist omdat die elke externe bron breekt die niet meewerkt en op een normale site zelden loont.

Wat elk beschermt

COOP bepaalt of je venster een "browsing-contextgroep" deelt met het venster dat het opende of met de vensters die jij opent. Met same-origin heeft een pagina op een ander domein die de jouwe opent met window.open geen bruikbare verwijzing meer naar jouw venster (en andersom), wat manipulatie-aanvallen tussen tabbladen afsnijdt en de weg sluit waarlangs geheugenlekken van het type Spectre worden uitgebuit. CORP bepaalt wie je bronnen mag insluiten. Met same-origin kan een andere site je afbeeldingen, scripts of lettertypen niet laden met een <img>- of <script>-tag, ook al zijn de URL's openbaar: de browser blokkeert het antwoord voordat het die site bereikt. Geen van beide verhelpt een bestaande fout; het is verdediging in de diepte, en daarom is het ontbreken ervan van lage ernst.

Hoe je ze toevoegt

Aanbevolen waarden voor een site die geen bronnen deelt met andere domeinen:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
  • Nuxt: in routeRules van nuxt.config, onder de regel '/**', naast je andere headers.
  • Next.js: in de functie headers() van next.config.js.
  • Vercel: in vercel.json, sectie headers. Netlify: in _headers, onder /*.
  • nginx: twee regels add_header ... always; in het server-blok. Apache: Header always set in de VirtualHost.
  • Express: helmet() voegt ze in recente versies standaard toe; controleer welke versie je hebt geïnstalleerd.

Twee dingen om te controleren voordat je ze inschakelt

  • Logins via pop-up. Gebruik je "Inloggen met Google" of een andere provider in pop-upmodus, dan moet de pop-up praten met het venster dat hem opende. Met same-origin werkt dat niet meer; gebruik same-origin-allow-popups, dat de bescherming behoudt en dit geval toestaat.
  • Bronnen die je aan andere domeinen serveert. Worden je afbeeldingen of lettertypen geladen vanaf een andere site van jou (een blog op een ander domein, een widget die derden insluiten), dan blokkeert same-origin ze daar. Gebruik same-site als de andere site een subdomein is, of cross-origin op de specifieke routes van die bronnen.

Controleer of het opgelost is

curl -sI https://jouwdomein.nl | grep -iE "^cross-origin-(opener|resource)-policy:"

Beide regels moeten verschijnen. Open daarna je site, test de login en elke pop-upintegratie, en kijk in de browserconsole: een door CORP geblokkeerde bron verschijnt daar met een expliciete melding.

Veelgestelde vragen

Vervangt dit CORS?

Nee, ze vullen elkaar aan en wijzen in tegengestelde richtingen. CORS opent je antwoorden voor specifieke origins wanneer dat nodig is; CORP sluit ze standaard voor iedereen die ze wil insluiten. Je kunt sitebreed CORP same-origin hebben en CORS open op één API-route.

Heb ik ook Cross-Origin-Embedder-Policy nodig?

Alleen als je SharedArrayBuffer of hogeresolutietimers wilt (videobewerking, emulators, sommige WebAssembly-apps). COEP vereist dat alles wat je insluit CORP of CORS draagt, en de meeste externe scripts doen dat niet. Voor een gewone site zijn COOP en CORP genoeg.

Hoeveel verbetert het het cijfer?

Weinig in punten, omdat het een bevinding met lage ernst is; maar het is een van de weinige verbeteringen zonder bijwerkingen als je de twee controles hierboven doet. De headers die wel gewicht hebben, staan in beveiligingsheaders en worden uitgelegd in HTTP-headers 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

Uit de blog

Gerelateerde checks