Scopri come impostare cookie proprietari per garantire sicurezza, compatibilità tra browser e ridurre al minimo le possibilità di malfunzionamento una volta eliminati i cookie di terze parti.
I cookie possono essere proprietari o di terze parti in base al contesto dell'utente. a seconda del sito su cui si trova in quel momento l'utente. Se il dominio e lo schema registrabili del cookie corrispondono alla pagina di primo livello corrente, ovvero ciò che viene visualizzato nella barra degli indirizzi del browser, il cookie è considerato proveniente dallo stesso sito della pagina e viene generalmente chiamato cookie proprietario.
I cookie di domini diversi dal sito corrente vengono generalmente chiamati cookie di terze parti.
La ricetta perfetta per fare dei biscotti
Se il cookie che hai impostato non viene usato nei vari siti, ad esempio per gestire le sessioni sul tuo sito, e non viene mai usato in un iframe tra siti, quel cookie viene sempre usato in un contesto proprietario.
Per impostazione predefinita, i cookie possono essere condivisi tra i siti, accessibili tramite JavaScript e inviati tramite connessioni HTTP, il che comporta alcuni rischi per la privacy e la sicurezza. Anche se sono in corso lavori per migliorare il comportamento predefinito, tramite Privacy Sandbox e altre proposte come i cookie legati all'origine, oggi puoi fare molto di più impostando attributi aggiuntivi sui tuoi cookie.
La configurazione che segue è una best practice, in quanto garantisce la sicurezza e la compatibilità tra browser per la maggior parte dei cookie proprietari. Fornirà una base sicura, che puoi regolare per consentire l'accesso solo quando necessario. Questo articolo illustra anche le varianti di una ricetta per alcuni casi d'uso specifici.
La ricetta
Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Host
è un prefisso facoltativo che rende obbligatori alcuni attributi e ne vieta altri:
Secure
deve essere presenteDomain
deve essere omessoPath
deve essere/
Con l'aggiunta di Host
, puoi affidarti al browser per verificare se questi attributi sono impostati in linea con le regole di __Host
e rifiutare il cookie in caso contrario.
Secure
protegge i cookie dal furto su reti non sicure perché consente l'invio di cookie solo tramite connessioni HTTPS. Se non hai eseguito completamente la migrazione del sito a HTTPS, impostalo come priorità.
L'attributo Domain
specifica quali host possono ricevere un cookie. Se la ometti, il cookie viene limitato all'host del documento attuale, esclusi i sottodomini: il cookie per example.com
verrà inviato per ogni richiesta a example.com
, ma non per le richieste a images.example.com
. Se hai diverse app in esecuzione su sottodomini diversi, questo riduce il rischio che un dominio compromesso consenta l'accesso agli altri.
Path
indica il percorso che deve esistere nell'URL richiesto affinché il browser invii l'intestazione Cookie
. Se imposti Path=/
, il cookie viene inviato a tutti i percorsi dell'URL su quel dominio. La combinazione di no Domain
e Path=/
rende il cookie associato all'origine il più vicino possibile, quindi si comporta in modo simile a un'altra archiviazione lato client, ad esempio LocalStorage
. Non c'è confusione sul fatto che example.com/a
possa ricevere valori diversi per example.com/b
.
L'attributo HttpOnly
aggiunge una certa protezione contro script dannosi di terze parti sui tuoi siti limitando l'accesso a JavaScript. Consente di inviare un cookie solo nelle intestazioni delle richieste e li rende non disponibili per JavaScript utilizzando document.cookie
.
Max-Age
limita la durata di un cookie perché le sessioni del browser possono durare piuttosto a lungo e non vuoi che i cookie rimangano inattivi per sempre. È ideale per i cookie a breve termine, come sessioni utente, o anche per quelli più brevi, come i token per l'invio di moduli. Il valore Max-Age
viene definito in secondi e nell'esempio precedente è impostato su 7776000 secondi, ovvero 90 giorni. Si tratta di un valore predefinito ragionevole, che puoi modificare a seconda del caso d'uso.
SameSite=Lax
limita l'invio del cookie solo per le richieste sullo stesso sito. Vale a dire quando la richiesta corrisponde al contesto di navigazione corrente, ovvero il sito di primo livello che l'utente sta visitando attualmente e viene visualizzato nella barra degli indirizzi. SameSite=Lax
è il valore predefinito nei browser moderni, ma è buona norma specificarlo per garantire la compatibilità tra browser che potrebbero avere valori predefiniti diversi. Contrassegnando esplicitamente il cookie come "solo dello stesso sito", lo limiti ai contesti proprietari e non dovresti apportare modifiche a quel cookie quando i cookie di terze parti non sono più disponibili.
Per scoprire di più sui diversi attributi dei cookie, consulta la documentazione di Set-Cookie
su MDN.
Ricetta dei cookie proprietari per i siti con sottodomini
Se hai un sito con sottodomini e vuoi avere una sessione per tutti, il prefisso Host
può essere troppo restrittivo. Ad esempio, news.site
potrebbe avere sottodomini per argomenti come finance.news.site
e sport.news.site
e vuoi una sessione utente per tutti. In questo caso, utilizza il prefisso __Secure
anziché __Host
e specifica Domain
.
La ricetta
Set-Cookie:
__Secure-cookie-name=cookie-value;
Secure;
Domain=news.site;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Secure
è un prefisso facoltativo che dichiara meno requisiti rispetto a Host
: richiede solo che il cookie sia impostato con l'attributo Secure
.
Limitazione dell'accesso ai cookie proprietari per le richieste avviate da siti web di terze parti
Sebbene i cookie SameSite=Lax
non vengano inviati nelle richieste secondarie tra siti (ad esempio, durante il caricamento di immagini o iframe incorporati su un sito di terze parti), vengono inviati quando un utente visita il sito di origine (ad esempio, quando segue un link da un sito diverso).
Puoi limitare ulteriormente l'accesso ai cookie e non consentire l'invio insieme alle richieste avviate da siti web di terze parti con SameSite=Strict
. Ciò è utile quando sono presenti cookie relativi a funzionalità che rimangono sempre alla base di una navigazione iniziale, come la modifica di una password o un acquisto.
La ricetta
Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Strict;