Begrip: CORS
CORS (Cross-Origin Resource Sharing) is een beveiligingsmechanisme dat bepaalt hoe webapplicaties in een domein (origin) kunnen communiceren met bronnen die gehost worden op een ander domein. Via HTTP-headers geeft een server expliciet aan welke origins toegang hebben tot specifieke bronnen. Wanneer een HTTP-request afkomstig is van een andere origin dan de server, wordt het door de browser geblokkeerd, tenzij de server expliciet toestemming geeft via de juiste CORS-headers.
CORS is specifiek gericht op verzoeken die vanuit een browser worden geĂŻnitieerd via JavaScript (fetch). Dit betekent dat CORS niet gebruikt wordt bij verzoeken die uitgevoerd worden buiten een browseromgeving, zoals verzoeken vanaf een Node.js server, desktopapplicatie, native mobiele applicatie (geschreven in Kotlin of Swift) of een andere server-side applicatie.
Vanuit beveiligingsoogpunt blokkeert een browser standaard elk HTTP-verzoek dat wordt gedaan naar een andere origin. Dit betekent dat wanneer een Single Page Application (SPA) probeert om gegevens op te halen van een externe API, de browser deze verzoeken zal blokkeren, tenzij de server expliciet toestemming heeft verleend via de juiste CORS-instellingen. Deze aanpak helpt om aanvallen zoals Cross-Site Request Forgery (CSRF) te voorkomen. Kwaadwillenden kunnen dan niet zomaar vanuit een andere website (of via een kwaadaardige extensie of bookmark) JavaScript-code uitvoeren om ongeautoriseerde HTTP-verzoeken te versturen en gevoelige gegevens te stelen.
Stel dat CORS niet bestond en dat een gebruiker in tabblad A is ingelogd op een bankwebsite en in tabblad B een kwaadaardige website bezoekt. De kwaadaardige website kan dan HTTP-requests versturen naar de bankwebsite, alsof de gebruiker deze verzoeken zelf heeft gestuurd. Omdat er geen CORS is, en omdat de browser cookies automatisch meestuurt bij elk request naar de bankwebsite, kan de kwaadwillende dus overschrijvingen uitvoeren op de bankrekening van de gebruiker. CORS helpt om dit soort aanvallen te voorkomen, het is natuurlijk nog steeds mogelijk dat een kwaadwillende JavaScript code injecteert in een website en de requests uitvoert vanuit het banktabblad, waarbij CORS niet van toepassing is. CORS is dus slechts een klein, maar belangrijk, deel van de puzzel.
Natuurlijk zijn er API's die zonder problemen publiek beschikbaar gesteld kunnen worden, met name read-only API's die het weerbericht, nieuws, of andere openbare informatie ophalen. Voor deze API's moeten de Access-Control-Allow-Origin header ingesteld worden. Hier kunnen meerdere origins aan meegegeven worden, de origin * kan gebruikt worden om de route overal beschikbaar te maken.