Ricette di biscotti originali

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.

Milica Mihajlija
Milica Mihajlija

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.

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;
Dettagli

Host è un prefisso facoltativo che rende obbligatori alcuni attributi e ne vieta altri:

  • Secure deve essere presente
  • Domain deve essere omesso
  • Path 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.

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;
Dettagli

Secure è un prefisso facoltativo che dichiara meno requisiti rispetto a Host: richiede solo che il cookie sia impostato con l'attributo Secure.

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;