Ricette di biscotti originali

Scopri come impostare i cookie proprietari per garantire la sicurezza, la compatibilità tra browser e ridurre al minimo le possibilità di interruzione una volta che i cookie di terze parti verranno ritirati.

Milica Mihajlija
Milica Mihajlija

I cookie possono essere proprietari o di terze parti in relazione al contesto dell'utente, a seconda del sito su cui si trova l'utente in quel momento. Se lo schema e il dominio registrabile 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 ed è generalmente indicato come cookie proprietario.

I cookie provenienti da domini diversi dal sito corrente vengono generalmente definiti cookie di terze parti.

Se il cookie che stai impostando non viene utilizzato in più siti, ad esempio viene utilizzato per gestire le sessioni sul tuo sito e non viene mai utilizzato in un iframe tra siti, tale cookie viene sempre utilizzato in un contesto proprietario.

Per impostazione predefinita, i cookie possono essere condivisi tra siti, accessibili tramite JavaScript e inviati tramite connessioni HTTP, il che comporta alcuni rischi per la privacy e la sicurezza. Sebbene sia in corso il lavoro per migliorare il comportamento predefinito, tramite Privacy Sandbox e altre proposte come i cookie associati all'origine, oggi puoi fare molto che puoi fare impostando attributi aggiuntivi sui tuoi cookie.

La seguente configurazione è una best practice per garantire la sicurezza e la compatibilità tra browser per la maggior parte dei cookie proprietari. Ti fornirà una base sicura che potrai modificare per aprire le autorizzazioni solo quando necessario. Questo articolo tratta anche le varianti di ricette 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
  • Il valore Path deve essere /

Se viene aggiunto Host, puoi fare affidamento sul browser per verificare se questi attributi sono impostati in linea con le regole __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 su connessioni HTTPS. Se non hai eseguito completamente la migrazione del tuo sito a HTTPS, dai una priorità a questo passaggio.

L'attributo Domain specifica gli host che possono ricevere un cookie. Se il criterio non viene omesso, il cookie viene limitato all'host del documento corrente, esclusi i sottodomini: il cookie per example.com verrà inviato ogni volta che viene richiesto a example.com, ma non per le richieste a images.example.com. Se hai diverse app in esecuzione su sottodomini diversi, in questo modo ridurrai il rischio che un dominio compromesso consenta di accedere agli altri.

Path indica il percorso che deve esistere nell'URL richiesto affinché il browser invii l'intestazione Cookie. L'impostazione Path=/ significa che il cookie viene inviato a tutti i percorsi degli URL su quel dominio. La combinazione di Domain e Path=/ rende il cookie associato il più possibile all'origine, pertanto si comporta in modo simile ad altri spazi di archiviazione lato client come LocalStorage. Non c'è confusione che example.com/a possa ricevere valori diversi rispetto a example.com/b.

L'attributo HttpOnly aggiunge una certa protezione da script di terze parti dannosi 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 dei cookie poiché le sessioni del browser possono durare a lungo e non è consigliabile che i cookie inattivi siano inutilizzabili per sempre. È utile per i cookie a breve termine, come le sessioni utente, o anche per quelli più brevi, come i token per l'invio dei moduli. Max-Age è definito in secondi e nell'esempio precedente è impostato su 7.776.000 secondi, ovvero 90 giorni. Si tratta di un valore predefinito ragionevole, che può essere modificato a seconda del caso d'uso.

SameSite=Lax limita l'invio dei cookie solo per le richieste dello stesso sito. Questo significa che la richiesta corrisponde al contesto di navigazione corrente: il sito di primo livello che l'utente sta attualmente visitando è visualizzato nella barra degli indirizzi. SameSite=Lax è l'impostazione predefinita nei browser moderni, ma è buona norma specificarla per garantire la compatibilità tra browser che potrebbero avere valori predefiniti diversi. Se contrassegni esplicitamente il cookie come "solo stesso sito", lo limiti ai tuoi contesti proprietari e non dovresti apportare modifiche a quel cookie quando i cookie di terze parti non sono più disponibili.

Per saperne di più sui diversi attributi dei cookie, consulta la documentazione Set-Cookie su MDN.

Se hai un sito con sottodomini e vuoi avere una sola 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 richiede 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 altro sito).

Puoi limitare ulteriormente l'accesso ai cookie e non consentire l'invio dei cookie insieme alle richieste avviate da siti web di terze parti con SameSite=Strict. Questo è utile quando hai cookie relativi a funzionalità che saranno sempre dietro 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;