Same-site cookies zijn een belangrijk beveiligingsmechanisme dat kan worden gebruikt om Cross-Site Request Forgery (CSRF)-aanvallen in webapplicaties te beperken. CSRF-aanvallen vinden plaats wanneer een aanvaller een slachtoffer ertoe verleidt een onbedoelde actie uit te voeren op een website waarop het slachtoffer is geverifieerd. Door de sessie van het slachtoffer te misbruiken, kan de aanvaller zonder diens toestemming acties namens het slachtoffer uitvoeren.
Cookies van dezelfde site helpen CSRF-aanvallen te voorkomen door de reikwijdte van cookies te beperken tot dezelfde oorsprong. Een oorsprong wordt gedefinieerd door de combinatie van het protocol (bijvoorbeeld HTTP of HTTPS), domein en poortnummer. Wanneer een cookie wordt ingesteld met het kenmerk 'SameSite', wordt aangegeven of de cookie moet worden verzonden in cross-site verzoeken.
Er zijn drie mogelijke waarden voor het kenmerk 'SameSite':
1. "Strict": Wanneer het kenmerk "SameSite" is ingesteld op "Strict", wordt de cookie alleen verzonden bij verzoeken die afkomstig zijn van dezelfde site. Dit betekent dat de cookie niet wordt verzonden bij cross-site verzoeken, waardoor CSRF-aanvallen effectief worden voorkomen. Als een gebruiker bijvoorbeeld wordt geverifieerd op "example.com" en een kwaadwillende site bezoekt die een CSRF-aanval probeert uit te voeren, zal de browser de "Strict" same-site cookie niet in het verzoek opnemen, waardoor de aanval wordt voorkomen.
2. "Lax": Wanneer het kenmerk "SameSite" is ingesteld op "Lax", wordt de cookie verzonden in cross-site verzoeken die als veilig worden beschouwd, bijvoorbeeld wanneer het verzoek wordt geactiveerd door navigatie op het hoogste niveau van de gebruiker. De cookie wordt echter niet verzonden bij verzoeken die worden geïnitieerd door websites van derden, bijvoorbeeld wanneer een afbeeldings- of scripttag vanuit een ander domein wordt geladen. Dit zorgt voor een balans tussen veiligheid en bruikbaarheid. Een gebruiker die via een link een kwaadwillende site bezoekt, zal bijvoorbeeld geen CSRF-aanval activeren, omdat de 'Lax'-cookie van dezelfde site niet in het verzoek wordt opgenomen.
3. "None": Wanneer het kenmerk "SameSite" is ingesteld op "None", wordt de cookie verzonden bij alle cross-site verzoeken, ongeacht hun oorsprong. Om de veiligheid van het gebruik van "Geen" te garanderen, moet de cookie echter ook als "Veilig" worden gemarkeerd, wat betekent dat deze alleen via HTTPS-verbindingen wordt verzonden. Door deze combinatie kunnen webapplicaties cross-site functionaliteit ondersteunen en toch beschermen tegen CSRF-aanvallen. Opgemerkt moet worden dat de waarde 'None' alleen mag worden gebruikt als dat nodig is, omdat dit het aanvalsoppervlak en de kans op CSRF-kwetsbaarheden vergroot.
Om het gebruik van cookies van dezelfde site bij het beperken van CSRF-aanvallen te illustreren, kunt u het volgende scenario overwegen: een bankwebsite waarmee gebruikers geld kunnen overboeken. Zonder cookies van dezelfde site zou een aanvaller een kwaadaardige website kunnen creëren die een verborgen formulier bevat dat automatisch een verzoek tot overboeking indient bij de website van de bank wanneer deze wordt bezocht door een geverifieerde gebruiker. Als de browser van de gebruiker de sessiecookie in het verzoek opneemt, wordt de overdracht uitgevoerd zonder toestemming van de gebruiker. Door de sessiecookie echter in te stellen als een cookie van dezelfde site met het kenmerk 'Strict', zal de browser de cookie niet opnemen in het cross-site verzoek, waardoor de CSRF-aanval effectief wordt voorkomen.
Same-site-cookies zijn een waardevol beveiligingsmechanisme voor het tegengaan van CSRF-aanvallen in webapplicaties. Door de reikwijdte van cookies te beperken tot dezelfde oorsprong, voorkomen deze cookies dat aanvallers de sessie van een gebruiker kunnen misbruiken om ongeautoriseerde acties uit te voeren. De waarde 'Strict' zorgt ervoor dat cookies alleen worden verzonden in verzoeken die afkomstig zijn van dezelfde site, terwijl de waarde 'Lax' ervoor zorgt dat cookies worden verzonden in veilige cross-site verzoeken. De waarde 'None', gecombineerd met het kenmerk 'Secure', maakt cross-site functionaliteit mogelijk terwijl bescherming blijft tegen CSRF-aanvallen.
Andere recente vragen en antwoorden over Basisprincipes van beveiliging van EITC/IS/WASF-webapplicaties:
- Beschermt de implementatie van Do Not Track (DNT) in webbrowsers tegen vingerafdrukken?
- Helpt HTTP Strict Transport Security (HSTS) bij het beschermen tegen aanvallen op protocoldowngrades?
- Hoe werkt de DNS-rebinding-aanval?
- Vinden opgeslagen XSS-aanvallen plaats wanneer een kwaadaardig script wordt opgenomen in een verzoek aan een webapplicatie en vervolgens wordt teruggestuurd naar de gebruiker?
- Wordt het SSL/TLS-protocol gebruikt om een gecodeerde verbinding in HTTPS tot stand te brengen?
- Wat zijn headers voor ophaalmetagegevensverzoeken en hoe kunnen ze worden gebruikt om onderscheid te maken tussen verzoeken van dezelfde oorsprong en verzoeken van meerdere sites?
- Hoe verkleinen vertrouwde typen het aanvalsoppervlak van webapplicaties en vereenvoudigen ze beveiligingsbeoordelingen?
- Wat is het doel van het standaardbeleid in vertrouwde typen en hoe kan het worden gebruikt om onveilige tekenreekstoewijzingen te identificeren?
- Wat is het proces voor het maken van een vertrouwd typen-object met behulp van de vertrouwde typen-API?
- Hoe helpt de richtlijn vertrouwde typen in een inhoudbeveiligingsbeleid DOM-gebaseerde cross-site scripting (XSS)-kwetsbaarheden te verminderen?
Bekijk meer vragen en antwoorden in EITC/IS/WASF Web Applications Security Fundamentals

