Je bouwt je app, de browser gooit een rode CORS-fout, je zoekt op een forum en kopieert de fix die belooft dat alles gewoon werkt. Meestal is dat de slechtst mogelijke. Laten we begrijpen wat CORS is en waarom die sluiproute gevaarlijk is.
Wat CORS echt is
Standaard laat de browser site-a.com niet de respons van een API op site-b.com lezen. Dat is de same-origin policy, en die beschermt je gebruikers: het houdt tegen dat een kwaadaardig tabblad data leest van een ander tabblad waar je bent ingelogd. CORS is het mechanisme waarmee je server zegt deze specifieke origins zijn toegestaan, via de Access-Control-Allow-Origin-header.
De fout die alles breekt
Het gevaarlijke patroon is elke binnenkomende origin terugkaatsen en daar bovenop credentials toestaan:
Access-Control-Allow-Originingesteld op de aanvragende origin (dynamische reflectie)- samen met
Access-Control-Allow-Credentials: true
Met die combinatie kan elke website die je gebruiker bezoekt je API aanroepen met de sessiecookies van de gebruiker en de respons lezen. Met andere woorden: een willekeurige site kan de privédata van je gebruiker binnenhalen zonder dat die het merkt. De wildcard * is minder ernstig omdat de browser verbiedt 'm met credentials te combineren, maar hij hoort ook niet in productie.
Hoe je het goed configureert
Denk in verdediging, niet in gemak:
- Houd een allowlist van toegestane origins bij en match die exact. Kaats nooit terug wat binnenkomt zonder te valideren.
- Zet
Allow-Credentialsalleen aan als je echt cookies moet sturen, en alleen voor specifieke origins. - Beperk methodes en headers tot wat je gebruikt (
Allow-Methods,Allow-Headers). - Wees voorzichtig met het opnemen van
nullof subdomeinen van derden in de lijst.
Waarom het moeilijk te spotten is
Deze fout is stil: alles werkt, er is geen zichtbare fout en de app lijkt gezond. Je merkt het pas als iemand er misbruik van maakt. Daarom moet je je CORS-configuratie bij elke deploy expliciet nakijken, in plaats van te vertrouwen op geen fout betekent dat het goed zit.
Kijk je CORS na met Scanaris
Scanaris doet een read-only check of je API origins terugkaatst en hoe die op CORS-headers reageert, zonder aanvallen te starten of je data aan te raken: het observeert alleen de openbare respons. Vindt het een gevaarlijke opzet, dan geeft het je een fix prompt zodat je AI 'm met een allowlist kan herschrijven. Scan je site en vermijd de fout die niemand ziet tot het te laat is.