Wat is Cookie (HTTP-cookie)?

Een klein stukje gegevens in de vorm van een naam-waardepaar dat een webserver met de header Set-Cookie door de browser laat opslaan. De browser voegt het daarna automatisch in de header Cookie toe aan latere verzoeken naar dezelfde site. Cookies worden vaak gebruikt om een sessie-ID te bewaren, zodat een ingelogde toestand over het toestandsloze HTTP behouden blijft. Attributen zoals Secure (alleen via HTTPS verzenden), HttpOnly (verbergen voor scripts), SameSite (of de cookie wordt meegestuurd met verzoeken die vanaf andere sites zijn gestart) en Expires/Max-Age (vervaldatum) bepalen hoe de cookie wordt behandeld.

Japanse benaming: Cookie

“Cookie (HTTP-cookie)” komt voor in 6 oefenvragen uit 2 onderwerpen, bijv. Basis van webtechnologie, Basis van informatiebeveiliging.

Vakgebied: Basis van webtechnologie

Hoe het werkt

De server voegt aan een antwoord een header toe zoals „Set-Cookie: sid=…”, en de browser slaat die op. Vanaf dan voegt de browser automatisch „Cookie: sid=…” toe aan verzoeken naar dezelfde site (het bereik dat de attributen Domain en Path vastleggen). Met de ontvangen sessie-ID zoekt de server de gebruikersgegevens op die hij zelf bewaart. Een cookie zonder opgegeven vervaldatum wordt in het algemeen verwijderd als de browser wordt gesloten.

Attributen voor de beveiliging

Met Secure wordt de cookie alleen via HTTPS verzonden, zodat de waarde niet door afluisteren bekend kan worden. Met HttpOnly kan de JavaScript van de pagina de cookie niet lezen, wat de schade beperkt als een sessie-ID anders via XSS zou worden gestolen. SameSite legt met Strict, Lax of None vast of de cookie wordt meegestuurd met verzoeken die vanaf andere sites zijn gestart, en is een van de tegenmaatregelen tegen aanvallen die een gebruiker verzoeken laten versturen die hij niet bedoelde.

Verschil met localStorage

Ook localStorage is een mechanisme om gegevens in de browser op te slaan, maar die gegevens worden niet automatisch aan verzoeken toegevoegd; JavaScript leest en schrijft ze. Een cookie is klein, in het algemeen tot ongeveer 4 KB per stuk, en wordt bij elk verzoek naar zijn site meegestuurd, dus grote gegevens in cookies zetten vergroot het verkeer. Authenticatiegegevens zoals een sessie-ID worden in het algemeen in een HttpOnly-cookie gezet die scripts niet kunnen lezen.

Nu oefenen: vragen over Cookie (HTTP-cookie)

Welke beschrijving van een verschil tussen localStorage van de browser en cookies is juist?

  1. AGegevens in localStorage worden niet automatisch aan verzoeken toegevoegd; de JavaScript van pagina's met dezelfde origin leest en schrijft ze
  2. BGegevens in localStorage worden, net als cookies, bij elk verzoek naar dezelfde site in een header gezet en automatisch naar de server verzonden
  3. COok localStorage kan het attribuut HttpOnly krijgen, dus zelfs als er een sessie-ID in staat, kunnen de scripts van de pagina die niet lezen
Antwoord en toelichting tonen

Antwoord: A. Gegevens in localStorage worden niet automatisch aan verzoeken toegevoegd; de JavaScript van pagina's met dezelfde origin leest en schrijft ze

localStorage is een opslagplaats in de browser die per origin sleutels en waarden als strings bewaart; er is geen manier om een vervaldatum in te stellen, en de gegevens blijven in het algemeen bestaan tot ze worden verwijderd. Ze worden niet automatisch naar de server verzonden, dus om ze te verzenden zet JavaScript ze in een verzoek. Cookies zijn klein, in het algemeen tot ongeveer 4 KB per stuk, en worden bij elk verzoek automatisch verzonden, terwijl in localStorage grotere gegevens kunnen worden bewaard. De JavaScript van de pagina kan ze echter op elk moment lezen, dus bij een XSS-lek kan de inhoud worden gestolen. Met dit risico moet rekening worden gehouden bij het opslaan van waarden die voor authenticatie worden gebruikt.

Veelgestelde vragen

Wat gebeurt er als cookies zijn uitgeschakeld?

Sessie-ID's kunnen dan niet meer worden doorgegeven, zodat veel sites je niet ingelogd kunnen houden. Ook informatie die in cookies wordt onthouden, zoals de inhoud van een winkelwagen of weergave-instellingen, blijft niet bewaard.

Wat zijn cookies van derden?

Dat zijn cookies die worden ingesteld door een andere site dan de pagina die je bekijkt, zoals een site die advertenties levert. Omdat ze zijn gebruikt om het gedrag van gebruikers over veel sites heen te volgen, versturen sommige browsers ze standaard niet of beperken ze ze, om de privacy te beschermen.

“Cookie (HTTP-cookie)” in de toelichting

Vragen met “Cookie (HTTP-cookie)” (6)

  1. Welke beschrijving van de cookie die met de bovenstaande header wordt ingesteld, is juist?
  2. Welke beschrijving van een verschil tussen localStorage van de browser en cookies is juist?
  3. HTTP is een toestandsloos (stateless) protocol. Welke beschrijving van wat dit betekent en van de gebruikelijke manier waarop een website een gebruiker ingelogd houdt, is juist?
  4. Een webapplicatie voor een prikbord had een kwetsbaarheid waarbij scripts in teksten die gebruikers plaatsten, werden uitgevoerd in de browsers van andere bezoekers. Welke combinatie geeft de naam van deze kwetsbaarheid en de fundamentele tegenmaatregel juist weer?
  5. Een webapplicatie heeft een kwetsbaarheid waarbij, als een ingelogde gebruiker een door een aanvaller klaargezette valpagina opent, de browser van de gebruiker verzoeken naar de legitieme site stuurt die de gebruiker niet bedoelde, zoals geld overmaken of instellingen wijzigen. Welke tegenmaatregel is geschikt?
  6. Als een webapplicatie vóór en na het inloggen dezelfde sessie-ID blijft gebruiken, kan een aanvaller de gebruiker een vooraf door de aanvaller klaargemaakte sessie-ID laten gebruiken en zich na het inloggen van de gebruiker met die ID als de gebruiker voordoen. Wat is de meest geschikte tegenmaatregel tegen deze aanval?

Verwante termen

Cross-site scripting (XSS) HTTP (Hypertext Transfer Protocol) CORS (cross-origin resource sharing) DOM (Document Object Model) Event loop HTTP-methode HTTP-statuscode JSON (JavaScript Object Notation) JWT (JSON Web Token) OAuth

Naar de woordenlijst