1. Introduzione
Cookie , o cookie HTTP, cookie web, cookie del browser è una piccola porzione di dati inviata dal sito Web e memorizzata nel browser dell'utente quando naviga su questo sito Web. Ogni volta che un utente carica un sito web, il browser invierà automaticamente dei cookie al server web per notificare al sito web le azioni precedenti dell'utente.
I cookie sono progettati per essere un meccanismo affidabile che aiuta i siti Web a ricordare le informazioni sullo stato (come gli articoli nel carrello) o a memorizzare le attività dell'utente (inclusi i clic). Un collegamento, un accesso, le pagine visitate durante la settimana, il mese o l'anno,... ).
Sebbene i cookie non possano trasportare virus né installare malware sul tuo computer, l'uso di cookie di tracciamento e in particolare di cookie di terze parti è considerato un modo per identificare informazioni personali dalla cronologia di navigazione degli utenti. I cookie possono salvare password o contenuti che gli utenti inseriscono nei moduli html, come numeri di carta di credito o indirizzi personali.
Quando un utente visita un sito web per la prima volta, un cookie viene inviato dal server web al browser e memorizzato sul suo computer. Quindi, quando ritorna sul sito web, il sito web lo riconoscerà grazie alle informazioni salvate nel cookie.
I cookie di autenticazione sono un metodo comune utilizzato per determinare se un utente ha effettuato l'accesso a un sito Web o meno. Senza un tale meccanismo, sarà difficile per il sito web sapere quando inviare informazioni personali all'utente e costringere l'utente ad accedere più volte. I cookie di autenticazione, sebbene molto convenienti, offrono agli hacker l'opportunità di leggere i dati sensibili nei cookie, eseguendo così azioni che danneggiano gli utenti.
2. Panoramica dei cookie HTTP
2.1. Storia
Il termine cookie deriva dal termine magic cookie, che è un dato immutabile inviato e ricevuto da un programma informatico. Un programmatore di nome Lou Montuli ebbe l'idea di utilizzare i cookie magici nelle comunicazioni web nel 1994. A quel tempo lavorava per Netscape Communications, su un progetto per sviluppare applicazioni di e-commerce per MCI. I cookie sono stati utilizzati come soluzione nella creazione di carrelli della spesa virtuali, aiutando i server di MCI a non dover salvare lo stato delle transazioni ma, invece, a memorizzarli sul computer dell'utente.
Insieme a John Giannandrea, Montuli scrisse la prima specifica per i cookie di Netscape. La versione 0.0beta di Mosaic Netscape, rilasciata il 13 ottobre 1994, supportava i cookie. Il primo utilizzo dei cookie (al di fuori del laboratorio) verificava se un cliente che visitava il sito web di Netscape lo aveva già visitato o meno. Montuli ottenne un brevetto sui cookie nel 1995. E la versione 2 di Internet Explorer (rilasciata nell'ottobre 1995) incorporava l'uso dei cookie.
In questo periodo l’introduzione dei cookie non è stata molto diffusa. In particolare, i cookie vengono accettati per impostazione predefinita, gli utenti non vengono avvisati della loro presenza. Il pubblico venne a conoscenza dell’esistenza dei cookie solo dopo la pubblicazione di un articolo in merito sul Financial Times il 12 febbraio 1996. Da allora, i cookie hanno ricevuto molta attenzione, in particolare le informazioni private in essi contenute. I cookie sono stati discussi in due udienze della Federal Trade Commission statunitense nel 1996 e nel 1997.
La prima discussione su una specifica formale dei cookie è iniziata nell'aprile 1995. Per svolgere questo lavoro è stato formato un gruppo speciale all'interno dell'Internet Engineering Task Force (IETF). Infine, la specifica è stata pubblicata dal gruppo nel febbraio 1997. La specifica definiva i cookie di terze parti come non accettabili per tutti, o almeno non abilitati per impostazione predefinita.
Nell'aprile 2011, nel documento RFC 6265 sono state pubblicate le specifiche standard per i cookie nell'uso pratico .
2.2. Terminologia
Cookie di sessione
I cookie di sessione, chiamati anche cookie in-memory o cookie transitori, esistono solo nella memoria temporanea mentre l'utente naviga sul sito web. Se al momento della creazione del cookie non viene impostata una data di scadenza o un intervallo di validità, verrà impostato un cookie di sessione. Normalmente i browser web cancellano automaticamente i cookie di sessione quando l'utente chiude il browser.
Cookie persistenti
I cookie persistenti prolungano la sessione dell'utente. Se un cookie persistente è impostato su un'età massima di 1 anno, durante tale periodo, il valore iniziale impostato nel cookie verrà inviato al server ogni volta che l'utente visita il sito web. Può essere utilizzato per registrare informazioni importanti, ad esempio il modo in cui l'utente ha visitato per la prima volta il sito web. Per questo motivo i cookie persistenti sono anche detti cookie di tracciamento.
Cookie sicuri
Il cookie sicuro è un attributo di sicurezza abilitato quando si utilizza HTTPS, garantendo che il cookie sia sempre crittografato quando viene trasferito dal client al server, aiutandolo a evitare l'intercettazione e la rivelazione di informazioni. Inoltre, tutti i cookie devono rispettare la politica della stessa origine del browser.
Cookie HttpOnly
L'attributo HttpOnly dei cookie è supportato dalla maggior parte dei browser. Un cookie di sessione HttpOnly verrà utilizzato solo in una richiesta HTTP (o HTTPS), limitando così l'accesso da parte di API non HTTP come Javascript. Questa restrizione mitiga ma non elimina il furto di cookie tramite le vulnerabilità Cross-site scripting (XSS).
Cookie di terze parti
I cookie di prima parte sono cookie appartenenti allo stesso dominio (o sottodomini all'interno dello stesso dominio) visualizzato nella barra degli indirizzi del browser. I cookie di terze parti sono cookie appartenenti a domini diversi visualizzati nella barra degli indirizzi del browser. I siti web possono avere contenuti di domini di terze parti (come banner pubblicitari), da cui è possibile tenere traccia della cronologia di navigazione degli utenti. Le impostazioni sulla privacy della maggior parte dei browser bloccano i cookie traccianti di terze parti.
Ad esempio, supponiamo che un utente visiti il sito Web example1.com . Questo sito Web contiene un annuncio pubblicitario di ad.foxytracking.com. Una volta caricato, i cookie di ad.foxytracking.com verranno salvati. Successivamente visita un altro sito web (example2.com), che contiene anch'esso un annuncio di ad.foxytracking.com e imposta anche un cookie appartenente a ad.foxytracking.com. Infine, entrambi questi cookie verranno inviati all'inserzionista durante il caricamento degli annunci o l'accesso al suo sito web. Gli inserzionisti possono utilizzare questi cookie per creare la cronologia di navigazione di un utente su tutti i siti Web contenenti i loro annunci.
Nel 2014 c'erano alcuni siti web che impostavano cookie che potevano essere letti da più di 100 domini di terze parti. In media, un sito web avrà circa 10 cookie impostati, con un numero massimo di cookie superiore a 800.
Superbiscotto
Un supercookie è un cookie proveniente da un dominio di primo livello, come .com, o da un suffisso pubblico, come .co.uk. È importante che i supercookie vengano bloccati dai browser a causa di alcuni problemi di sicurezza. Se sbloccato, un utente malintenzionato che controlla un sito Web dannoso può impostare un supercookie per impersonare le richieste degli utenti, inviando richieste ad altri siti Web che condividono lo stesso dominio di primo livello o suffisso pubblico. Ad esempio, un supercookie proveniente dal dominio .com potrebbe danneggiare le richieste a example.com, anche se il cookie non ha avuto origine da example.com. Può essere sfruttato per falsificare accessi o modificare le informazioni dell'utente.
Biscotti zombie
I cookie zombie sono cookie che vengono ricreati automaticamente dopo che l'utente li elimina. Questa operazione viene eseguita da uno script che memorizza il contenuto del cookie in un'altra posizione, ad esempio un archivio di contenuti Flash, un archivio HTML5 o qualche altro meccanismo lato client.
2.3. Struttura dei cookie
Un cookie della dimensione di 4KB comprende 7 componenti principali:
- Nome
- Valore
- Scadenza (data di scadenza)
- Percorso (percorso in cui il cookie è valido, "/" significa che il cookie è valido in qualsiasi percorso)
- Dominio
- Sicuro
- HttpOnly
I primi due componenti (nome e valore) sono obbligatori.
2.4. Utilizzo
Gestione della sessione
I cookie possono essere utilizzati per conservare i dati relativi all'utente durante più visite al sito web. I cookie sono una soluzione per creare un carrello della spesa, un carrello della spesa virtuale che aiuta gli utenti a salvare gli articoli scelti durante la navigazione tra i prodotti.
Le attuali applicazioni del carrello degli acquisti spesso memorizzano l'elenco degli articoli nel carrello nel database lato server invece di memorizzarlo in un cookie lato client. Il server web normalmente invierà un cookie contenente l'identificatore di sessione - ID sessione (che è univoco). Il browser Web restituirà questo ID di sessione con la richiesta di acquisto di ciascun utente.
Consentire agli utenti di accedere ai siti Web è un'altra applicazione dei cookie. Normalmente, durante il primo accesso, il server web invia al client un cookie contenente l'ID della sessione. Gli utenti invieranno le proprie informazioni e l'applicazione web autenticherà la sessione, quindi consentirà all'utente di utilizzare i suoi servizi.
I cookie forniscono un meccanismo di interazione client/server rapido e conveniente. Uno dei vantaggi dei cookie è che memorizzano le informazioni dell'utente in un file situato sul computer dell'utente. Ciò riduce significativamente lo spazio di archiviazione e il tempo di elaborazione del server.
Personalizzato
I cookie possono essere utilizzati per ricordare le informazioni personali di un utente quando visita un sito Web, per visualizzare contenuti più pertinenti per quell'utente ogni volta che visita nuovamente il sito Web.
Un esempio importante è la funzione di consiglio dei libri di amazon.com. Quando un utente fa clic su un libro, Amazon fornirà suggerimenti sui prossimi libri che l'utente dovrebbe controllare. Questi suggerimenti si basano su quali libri gli utenti hanno sfogliato in precedenza e quali libri hanno scelto di acquistare.
Un altro esempio è la funzione di suggerimento di ricerca di Ricerca Google. Quando accedi con il tuo account personale ed effettui una ricerca, Google ti fornirà suggerimenti "solo per te" e i risultati che desideri appariranno sempre in cima alla lista.
Tenere sotto controllo
I cookie di tracciamento possono essere utilizzati per tenere traccia della cronologia di navigazione di un utente. Ciò può essere fatto anche utilizzando l'indirizzo IP del computer che invia la richiesta al sito o facendo affidamento sul campo Referrer dell'intestazione della richiesta HTTP, ma i cookie garantiscono una maggiore precisione. Questo viene fatto come segue:
- Se un utente visita un sito web, ma questa richiesta non contiene un cookie, il server presumerà che questa sia la prima volta che l'utente visita questo sito web; Il server genererà una stringa casuale e la invierà come cookie al browser insieme alla pagina web richiesta.
- Da questo momento in poi, il cookie verrà automaticamente inviato dal browser al server ogni volta che viene richiesta una nuova pagina web in questo sito, il server restituirà la pagina web richiesta normalmente, ma con l'URL di quella pagina web e l'indirizzo tempo.L'accesso verrà salvato in un file di registro. Analizzando le informazioni salvate in questo file di registro, verranno rivelati la cronologia di navigazione della persona, i siti Web visitati di frequente e le abitudini di navigazione.
2.5. Distribuzione
I cookie sono dati inviati dal server al browser. Il browser lo reinvierà quindi al server senza modificarne il contenuto all'interno, ogni volta che l'utente invia una richiesta al sito. I cookie possono anche essere impostati da un linguaggio di scripting, come Javascript.
Ciascun browser Web può memorizzare almeno 300 cookie in un file da 4 KB e almeno 20 cookie per server o dominio.
Imposta i cookie
Il server web e il browser comunicano tra loro tramite HTTP (HyperText Transfer Protocol). Ad esempio, per accedere alla pagina http://www.example.org/index.html, il browser si connette al server inviando una richiesta HTTP come questa:
Il server risponderà inviando al browser un semplice pacchetto di testo, chiamato risposta HTTP. Questo pacchetto può contenere una riga contenente il contenuto del cookie:
Set-Cookie è un campo che indica al browser di memorizzare il cookie e di inviarlo al server in futuro ogni volta che c'è una richiesta al server (se il cookie è ancora scaduto). Ad esempio, il browser invia una richiesta a http://www.example.org/spec.html inviando una richiesta HTTP come questa:
Questa è una richiesta ad un'altra pagina appartenente allo stesso server. In questo caso il server capirà che questa richiesta è correlata alla richiesta precedente e risponde inviando al browser la pagina web richiesta, eventualmente aggiungendo altri valori di cookie.
Il valore del cookie può essere modificato dal server inviando il campo Set-Cookie: name=value nella risposta HTTP al browser. Il browser sostituirà quindi il vecchio valore del cookie con questo nuovo valore.
Il valore del cookie può includere qualsiasi carattere ASCII stampabile tranne ",", ";" e spazio bianco. Inoltre, i nomi dei cookie non possono contenere il carattere '=', poiché questo è il carattere che separa il nome e il valore.
Il termine cookie briciolo viene talvolta utilizzato per fare riferimento alla coppia nome-valore di un cookie.
I cookie possono anche essere impostati da Javascript o da un linguaggio di scripting simile. In Javascript, l'oggetto document.cookie viene utilizzato per impostare i cookie. L'attributo HttpOnly è responsabile di impedire a script dannosi di leggere il contenuto dei cookie.
Proprietà dei cookie
Oltre alla coppia nome-valore, il server può anche impostare una serie di altre proprietà dei cookie: Domain, Path, Expirse, Max-Age, Secure e HttpOnly. Il browser non invierà questi attributi al server, invierà solo la coppia nome-valore. Questi attributi vengono utilizzati dal browser per determinare quando eliminare i cookie, bloccare i cookie o inviare cookie al server.
Dominio e percorso
Dominio e percorso determinano l'ambito del cookie. Permettono al browser di determinare quando inviare cookie al server. Se non specificato, per impostazione predefinita vengono utilizzati il dominio e il percorso dell'oggetto richiesto. Tuttavia, esiste una differenza tra un set di cookie per foo.com senza l'attributo domain e un set di cookie con l'attributo domain foo.com. Nel primo caso il cookie verrà inviato solo in caso di richiesta a foo.com. In quest'ultimo caso, il cookie verrà inviato a tutti i sottodomini di foo.com. Quello che segue è un esempio di una direttiva Set-Cookie da un sito web dopo che l'utente ha effettuato l'accesso, da una richiesta a docs.foo.com:
Il primo LSID del cookie non ha un attributo domain e ha il percorso /accounts. Il browser invierà cookie solo quando la pagina richiesta è contenuta in docs.foo.com/accounts. I restanti due cookie, HSID e SSID, vengono rimandati al server se c'è una richiesta a qualsiasi sottodominio di foo.com.
I cookie possono anche essere impostati solo per il dominio principale e i relativi sottodomini. L'impostazione dei cookie su www.foo.com da www.bar.com non sarà consentita per motivi di sicurezza.
Scadenza ed età massima
L'attributo Expires indica al browser quando eliminare il cookie. La data in Scadenza è simile a questa: "Wdy, DD Mon YYYY HH:MM:SS GMT". Max-Age viene utilizzato anche per indicare la data di scadenza di un cookie. Consideriamo il seguente esempio:
Il primo cookie scade il 15 gennaio 2013, verrà utilizzato dal browser alla scadenza. Il secondo cookie made_write_conn non ha scadenza, ed è utilizzato come cookie di sessione, verrà cancellato alla chiusura del browser. Il terzo cookie, reg_fb_gate, ha una data di scadenza passata, verrà cancellato immediatamente.
Sicuro e solo Http
Le proprietà Secure e HttpOnly sono null; la loro presenza indica invece che vengono applicate le basi Secure e HttpOnly.
L'attributo Secure mantiene la trasmissione dei cookie all'interno di una connessione crittografata. Se il server web imposta un cookie con l'attributo secure da una connessione non sicura, il cookie può comunque essere intercettato da un attacco man-in-the-middle.
L'attributo HttpOnly indica al browser di non esporre cookie attraverso una connessione diversa da HTTP (o HTTPS), come Javascript, e quindi rende difficile ottenere cookie sfruttando le vulnerabilità Cross-Site Scripting (XSS).
3. Alcuni problemi di sicurezza quando si utilizzano i cookie
Se un sito Web utilizza l'ID di sessione per identificare la sessione di un utente, un utente malintenzionato potrebbe potenzialmente rubare il cookie per impersonare l'utente. Ecco alcuni scenari comuni di furto di cookie:
Intercettazioni
Il traffico in una rete può essere intercettato e letto da terzi (diversi dal destinatario e dal mittente). Questo traffico include i cookie. Se la trasmissione non è crittografata, un utente malintenzionato può leggere le informazioni sensibili contenute nel cookie. E sfruttando queste informazioni, gli aggressori si spacceranno per gli utenti per compiere azioni pericolose, come le transazioni bancarie.
Questo problema può essere risolto utilizzando un protocollo sicuro tra il computer dell'utente e il server: il protocollo HTTPS. Il server può utilizzare il flag Secure durante l'impostazione dei cookie. Il cookie verrà quindi inviato solo tramite un canale crittografato, come una connessione SSL.
Cross Site Scripting
I linguaggi di scripting, come Javascript, possono leggere i valori dei cookie e inviarli a server arbitrari.
Supponiamo che un sito Web presenti un errore di cross-site scripting, gli hacker possono inserire codice dannoso, come il seguente:
Quando la vittima fa clic sul collegamento sopra, il browser eseguirà lo script nell'attributo onclick: inviando il cookie della vittima al server attacker.com.
Il cross-site scripting è una delle vulnerabilità più comuni dei siti web (al terzo posto nella top 10 delle vulnerabilità più comuni nel 2013 - secondo OWASP).
Il rischio di questa vulnerabilità può essere limitato impostando il flag HttpOnly per i cookie. In quel momento, i linguaggi di scripting non potranno accedere ai cookie.
Falsificazione delle richieste intersito
CSRF (Cross-site request forgery) o attacco con un clic, è un metodo per sfruttare le vulnerabilità del sito Web in base al quale le vittime, utenti autorizzati dal sito Web, eseguono comandi non autorizzati a loro insaputa.
CSRF ingannerà il browser della vittima inducendolo a inviare richieste http alle applicazioni web. Nel caso in cui la sessione della vittima non sia scaduta, le richieste di cui sopra verranno effettuate con i diritti di autenticazione della vittima.
Ad esempio, la vittima Bob sta effettuando transazioni sul sito web di una certa banca X. Fred è l'aggressore, questo ragazzo sa come funziona il sito web della banca X quando vuole trasferire denaro dal conto A al conto B come segue:
http://bank.example.com/withdraw?account=accountA&amount=100&for=accountB
Invierà a Bob un messaggio dannoso.
Se la banca X memorizza le informazioni di autenticazione dell'utente in un cookie e Bob fa clic sul collegamento sopra, il denaro di Bob verrà trasferito a Fred.
Per limitare questo rischio, è possibile impostare i parametri Expires per i cookie.
4. Conclusione
I cookie vengono utilizzati oggi nella maggior parte delle applicazioni web. Contiene anche rischi potenziali, che influiscono in modo significativo sugli utenti. Pertanto, da parte dello sviluppatore, dobbiamo comprendere chiaramente i cookie e sapere come impostare i parametri necessari affinché l'applicazione possa essere più sicura contro gli attacchi degli hacker.