Cookies en Veiligheid – deel 1
Tijdens het surfen op het internet slaan websites verschillende cookies op. Cookies kunnen echter potentieel gevaarlijk zijn. Het is dus goed om op de hoogte te zijn (zowel als gebruiker en als programmeur) van de mogelijkheden en potentiele gevaren van cookies.
Een cookie is een bestandje met informatie die een website op uw computer opslaat zodra u deze bezoekt. Cookies worden gebruikt om gebruikers van elkaar te onderscheiden. Cookies bevatten informatie en worden tijdelijk en soms permanent opgeslagen. Cookies worden gebruikt om inloggegevens te onthouden wanneer u surft op een website, advertenties op maat aan te bieden, surfgedrag te analyseren en nog veel meer. De naam cookie is van origine een UNIX term. Unix gebruikte de term cookies om objecten te definiëren die aan een programma gekoppeld waren en konden verschillen op basis van de gebruikersinput. Unix noemde deze cookies “magic cookies”.
Over de verschillende soorten Cookies, mogelijke gevaren en potentiele oplossingen informeren we u graag hieronder.
Dus pak een goede kop koffie, notitieblok en een koek(ie) <- flauw he ? Let’s go!
Cookie wetgeving:
In Nederland is sinds 2012 de cookie wetgeving van kracht. Deze wetgeving houdt in dat de website expliciet toestemming moet vragen aan de gebruiker alvorens de website bepaalde cookies mag gebruiken. Toestemming moet expliciet verkregen worden en mag niet passief worden aangenomen door een tekst te plaatsen als “bij bezoek aan deze pagina gaat u ermee akkoord dat wij cookies gebruiken voor het goed functioneren van deze website alsmede het analyseren van onze statistieken”. Hieronder lezen we meer over de type cookies en het wettelijk gebruik hiervan.
Soorten Cookies:
Als basis is het goed om te weten welke soorten cookies er zijn. Verschillende soorten cookies onderscheiden we in functie (niet in techniek). We hebben:
- Functionele Cookie – Cookies die nodig zijn voor het primair functioneren van de website. Denk hierbij aan inloggen, formulierconstructie e.d. Voor deze cookies is geen toestemming vereist want deze vallen buiten de wetgeving. Functionele Cookies die we gebruiken voor authenticatiemethodes noemen we geheel toepasselijk ook wel “authentication cookies”
- Analytische Cookie – Dit type cookie wordt gebruikt om het surfgedrag op de website te analyseren (b.v. Google Analytics). Deze gegevens worden alleen door uw website gebruikt en noemen we daarom ook “first party cookies”. Momenteel is er voor dit type cookie expliciete toestemming nodig. Momenteel wordt er onderhandeld om voor dit type cookie passieve toestemming i.p.v. actieve toestemming te vragen. Bij passieve toestemming is het voldoende om alleen de tekst te plaatsen dat u deze cookies gebruikt.
- Tracking Cookie – Dit zijn cookies die het surfgedrag bijhouden en deze gegevens gebruiken voor het opstellen van surfprofielen. Dit kunnen uw eigen cookies zijn maar vaak zijn dit ook cookies van andere partijen. We noemen deze dan “third party cookies”. Deze profielen houden meer bij dan alleen analytische gegevens. Omdat deze profielen privacy gegevens gebruiken is voor dit type cookie altijd expliciete toestemming vereist.
- HTTP Cookie – De http Cookie is een cookie met het HttpOnly attribuut en wordt ondersteund door de meeste moderne browsers. Op een ondersteunde browser wordt een HttpOnly sessie-cookie alleen gebruikt bij het verzenden van HTTP (of HTTPS) verzoeken. Hierdoor wordt de toegang van andere, niet-HTTP-API’s beperkt. Denk hierbij aan b.v. JavaScript. De beperkingen van een HTTP cookie vermindert de dreiging van een sessie cookie-diefstal via cross-site scripting (XSS).
- Super Cookie – Een “supercookie” is een cookie afkomstig van een Top-Level Domain (zoals .Com en .NL) Het is belangrijk dat supercookies worden geblokkeerd door browsers, vanwege de veiligheidslekken ze met zich meebrengen. Als de gebruiker supercookies niet blokkeert dan kan een aanvaller met controle over een kwaadaardige website een supercookie instellen en zich voordoen als legitieme gebruiker naar een andere website die hetzelfde Top-Level Domain heeft als het kwaadaardige website. Bijvoorbeeld, een supercookie met een oorsprong van .NL, kan een kwaadaardig verzoek doen aan voorbeeld.nl zelfs als de cookie niet afkomstig is van voorbeeld.nl.
- Zombie Cookie – Sommige cookies worden automatisch opnieuw gemaakt nadat een gebruiker ze heeft verwijderd; deze worden zombie cookies genoemd. Dit kan voorkomen als er een script opgeslagen is met de inhoud van de cookie op een aantal andere locaties, zoals de lokale opslag voor Flash-inhoud, HTML5 en andere cliënt-side mechanismen.
Type Cookies:
Naast de verschillende soorten cookies zijn er ook verschillende type cookies. De type cookies baseren we op het gedrag van de cookies.
- Sessie Cookie (Session Cookie) – Een sessie cookie wordt opgeslagen in het tijdelijke geheugen van de browser. Als de computer echter te weinig geheugen heeft zal de cookie weggeschreven naar de harde schijf. Deze wordt daar weer verwijderd als de browser gesloten wordt. Als echter de browser crasht is er een grote kans dat de Cookie blijft staan. De meeste functionele en analytische cookies zijn tijdelijke cookies.
- Permanente Cookie (Persistent Cookie) – Dit type cookie is een cookie dat weggeschreven wordt op de harde schijf en daar blijft staan (ook als de browser gesloten is). Elke browser bewaard dit type cookie ergens anders. IE zal de cookie in een directory opslaan terwijl Google Chrome en Firefox hun eigen bestand (file database) gebruiken om deze cookies in op te slaan. Permanente cookies kunnen ook na een x aantal dagen verwijderd worden. Deze flag wordt meestal meegegeven aan permanente cookies die gebruikt worden om inloggegevens op te slaan.
Hoe werken Cookies:
Cookies zijn kleine brokjes data door de webserver bepaald worden. Deze data wordt naar de browser gestuurd. Cookies kunnen ook door een script in een andere taal verstuurd worden (b.v. JavaScript). Dit kan alleen als dit ook door de webbrowser wordt ondersteund. Cookie specificaties stellen dat browsers een minimaal aantal cookies moeten verzenden tussen elkaar.
Een cookie wordt geplaatst tijdens het laden van een webpagina. Tijdens het laden wordt het http protocol opgevolgd. Dit gaat als volgt:
- De browser verzend een verzoek aan de webserver om de pagina in te laden (data te laden van de webserver). Dit gebeurt middels een klein data pakketje (http Request = tekst-only string).
- De server retourneert zijn HTTP response. In de HTTP response geeft de webbrowser toestemming om de data te laden. Als er cookies geplaatst moeten worden zit in de HTTP response het commando: Set-Cookie. Het Set-Cookie commando wordt gegeven met bepaalde waardes. Met het Set-Cookie commando zal het cookie worden opgeslagen in het geheugen van de browser (of op de harde schijf). Als een pagina opnieuw geladen wordt (of andere pagina op dezelfde host) dan zal het cookie al bestaan. De browser herkent dit aan de bestaande waardes (Set-Cookie name=value). Als het cookie bestaat zal deze hergebruikt worden. Om een cookie te overschrijven voor een nieuw cookie wordt het commando Set-Cookie name=newvalue gebruikt (met dezelfde naam maar een andere waarde).
Een cookie mag bestaan uit alle ASCII tekens met uitzondering van de unicodes \u0021 t/m \u007E en het = teken.
Een cookie kan ook met javascript geplaatst worden. De string: document.cookie = “afzendernaam=q5”. De naam is dan “afzendernaam” en de waarde is “q5”.
Cookie attributen:
Naast het tweetal (naam en waarde) bestaan er meerdere cookie attributen. Echter is het naam/waarde paar het enige attribuut dat de browser terug zend naar de server. Overige attributen zijn:
- Domein en pad – Dit attribuut wordt gebruikt om het refererende domein en domein pad te definiëren. Zo weet de browser voor wel domein de cookie gebruikt moet worden en wanneer deze bepaalde data naar de server moet zenden.
- Expire – De datum en tijd dat de browser de cookie moet verwijderen
- Max-Age – De leeftijd van een cookie. Na de maximale leeftijd wordt deze door de browser verwijderd.
- Secure – Als dit attribuut is geactiveerd zal de cookie alleen verzonden worden over een veilige encypted connectie.
- HttpOnly – Dit attribuut verteld de browser om de cookie te laten zien over andere kanalen dan HTTP en HTTPS.
Conclusie:
Dit was het eerste deel van Cookies en Veiligheid. We weten nu wat cookies zijn en hoe ze werken. In het volgende hoofdstuk (deel 2) gaan we dieper in op de (on)veiligheid van cookies en wat we eraan kunnen doen.