Un cookie è un blocco di dati memorizzato nel browser che viene utilizzato per mantenere lo stato e altre informazioni di cui un sito web ha bisogno per eseguire le proprie funzionalità.
Un cookie è un piccolo file che i siti web memorizzano sul computer degli utenti e le informazioni che essi memorizzano si spostano tra il browser e il sito web.
Ogni cookie è una coppia chiave-valore con una serie di attributi che controllano quando e dove viene utilizzato il cookie. Questi attributi vengono utilizzati per impostare, ad esempio, le date di scadenza o per indicare che il cookie deve essere inviato solo tramite HTTPS. Puoi impostare un cookie in un'intestazione HTTP o tramite l'interfaccia JavaScript.
I cookie sono uno dei metodi disponibili per aggiungere stati permanenti ai siti web. Nel corso degli anni le loro capacità sono cresciute e si sono evolute, ma hanno lasciato la piattaforma con alcuni problemi legacy. Per risolvere questo problema, i browser (tra cui Chrome, Firefox ed Edge) stanno cambiando il proprio comportamento per applicare impostazioni predefinite incentrate sulla tutela della privacy.
Cookie in azione
Supponiamo che tu abbia un blog in cui vuoi mostrare la sezione "Novità" promozione per il tuo utenti. Gli utenti possono ignorare la promozione e non la vedranno più per un po'. Puoi memorizzare la preferenza in un cookie e impostarlo in modo che scada dopo un mese (2.600.000 secondi) e lo invii solo tramite HTTPS. L'intestazione dovrebbe avere questo aspetto questo:
Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
Quando il lettore visualizza una pagina che soddisfa questi requisiti, si trova su una connessione sicura e il cookie risale a meno di un mese fa (il browser invierà questa intestazione nella sua richiesta:
Cookie: promo_shown=1
Puoi anche aggiungere e leggere i cookie disponibili per il sito in JavaScript utilizzando
document.cookie
. Se assegni un compito a document.cookie
, verrà creato o
di eseguire l'override di un cookie con quella chiave. Ad esempio, puoi provare a procedere nel seguente modo
console JavaScript del browser:
→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"
La lettura di document.cookie
produrrà tutti i cookie accessibili nell'attuale
contesto, in cui ogni cookie è separato da un punto e virgola:
→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
Se provi questo approccio su una selezione di siti popolari, noterai che la maggior parte dei
impostano molto più di tre cookie. Nella maggior parte dei casi,
i cookie vengono inviati per ogni singola richiesta a quel dominio, che ha una serie di
implicazioni. La larghezza di banda per il caricamento è spesso più limitata rispetto al download per il tuo
utenti, in modo che l'overhead di tutte le richieste in uscita aggiunga un ritardo al tempo
al primo byte. Utilizza un approccio prudente per quanto riguarda il numero e le dimensioni dei cookie che imposti. Marca
utilizzo dell'attributo Max-Age
per garantire che i cookie non rimangano
più a lungo del necessario.
Che cosa sono i cookie proprietari e di terze parti?
Se torni alla stessa selezione di siti che stavi consultando in precedenza, probabilmente avrà notato la presenza di cookie per diversi domini, non solo quello che stavi visitando. I cookie che corrispondono al dominio sito corrente, ovvero ciò che è visualizzato nella barra degli indirizzi del browser, come cookie proprietari. Analogamente, i cookie provenienti da domini diversi da del sito corrente sono chiamati cookie di terze parti. Non è un valore assoluto ma è relativo al contesto dell'utente; lo stesso cookie può essere proprietari o di terze parti in base al sito su cui si trova in quel momento l'utente.
Continuando con l'esempio precedente, supponiamo che uno dei tuoi post del blog abbia un
di un gatto particolarmente incredibile ed è ospitata presso
/blog/img/amazing-cat.png
. Siccome è un'immagine così incredibile, un'altra persona
lo utilizza direttamente sul proprio sito. Se un visitatore ha visitato il tuo blog e ha
promo_shown
, poi quando visualizza amazing-cat.png
sull'altro
sito dell'utente in cui il cookie verrà inviato nella richiesta dell'immagine. Questo
non è particolarmente utile per nessuno poiché promo_shown
non viene utilizzato per scopi specifici
sul sito dell'altra persona, sta solo aggiungendo un overhead alla richiesta.
Se si tratta di un effetto involontario, perché dovresti farlo? È questo meccanismo che consente ai siti di mantenere lo stato quando vengono utilizzati in un contesto di terze parti. Ad esempio, se incorpori un video di YouTube sul tuo sito: i visitatori vedranno un link "Guarda più tardi" nel player. Se il visitatore è hai già effettuato l'accesso a YouTube, la sessione è stata resa disponibile player incorporato tramite cookie di terze parti, vale a dire che "Guarda più tardi" pulsante salvare il video in una volta, invece di chiedergli di eseguire l'accesso o di doverlo per spostarli dalla tua pagina e tornare su YouTube.
Una delle proprietà culturali del web è che tendenzialmente è aperto
predefinito. Fa parte di ciò che ha permesso a così tante persone di creare
i propri contenuti e le proprie app. Tuttavia, ciò ha comportato anche un certo numero di
problemi di sicurezza e privacy. Gli attacchi Cross-site Request Forgery (CSRF) si basano
il fatto che i cookie siano collegati a qualsiasi richiesta a una determinata origine, indipendentemente
che avvia la richiesta. Ad esempio, se visiti evil.example
, puoi
attiverà richieste a your-blog.example
e il tuo browser si collegherà
i cookie associati. Se il tuo blog non fa attenzione a come convalida le
richieste, quindi evil.example
potrebbe attivare azioni come l'eliminazione di post o l'aggiunta
i propri contenuti.
Gli utenti sono anche sempre più consapevoli di come i cookie possono essere utilizzati per monitorare i loro
attività su più siti. Tuttavia, fino ad ora non c'è stato un modo
esplicitamente l'intento con il cookie. Il cookie di promo_shown
dovrebbe
essere inviato solo in un contesto proprietario, mentre un cookie di sessione per un widget
integrati in altri siti serve intenzionalmente per fornire
di accesso in un contesto di terze parti.
Puoi dichiarare esplicitamente il tuo intento con un cookie impostando l'attributo SameSite appropriato.
Per identificare i cookie proprietari e impostare gli attributi appropriati, consulta le ricette di cookie proprietari.