Ogni cookie contiene una coppia chiave-valore con una serie di attributi che controllare quando e dove viene utilizzato il cookie.
Introduzione dell'attributo SameSite
(definito in
RFC6265bis)
ti consente di dichiarare se il tuo cookie è limitato ai cookie proprietari o
contesto stesso-sito. È utile capire esattamente cosa "sito" significa in questo caso.
Il sito è la combinazione del suffisso di dominio e della parte del dominio
prima. Ad esempio, il dominio www.web.dev
fa parte del sito web.dev
.
Termine chiave: se l'utente si trova su www.web.dev
e richiede un'immagine da
static.web.dev
, è una richiesta stesso sito.
L'elenco di suffissi pubblici definisce quali pagine vengono conteggiate come
sullo stesso sito. Non dipende solo da domini di primo livello come .com
,
ma può includere anche servizi come github.io
. Ciò consente
your-project.github.io
e my-project.github.io
vengono conteggiati come siti separati.
Termine chiave: se l'utente si trova su your-project.github.io
e richiede un'immagine da
my-project.github.io
è una richiesta cross-site.
Utilizza l'attributo SameSite
per dichiarare l'utilizzo dei cookie
L'attributo SameSite
in un cookie offre tre modi diversi per controllare
questo comportamento. Puoi scegliere di non specificare l'attributo oppure puoi utilizzare
Strict
o Lax
per limitare il cookie alle richieste dallo stesso sito.
Se imposti SameSite
su Strict
, il cookie può essere inviato solo in un
contesto proprietario; ovvero se il sito del cookie corrisponde a quello mostrato
nella barra degli indirizzi del browser. Pertanto, se il cookie promo_shown
è impostato come segue:
Set-Cookie: promo_shown=1; SameSite=Strict
Quando l'utente si trova sul tuo sito, il cookie viene inviato con la richiesta come previsto.
Tuttavia, se l'utente segue un link che rimanda al tuo sito da un altro, il cookie
non viene inviato nella richiesta iniziale.
Questa opzione è utile per i cookie relativi a caratteristiche sempre precedute da una
come cambiare la password o effettuare un acquisto, ma è altrettanto importante
restrittivo per un cookie come promo_shown
. Se il lettore segue il link
al sito, l'utente vuole che venga inviato il cookie in modo da poter applicare la sua preferenza.
SameSite=Lax
consente al browser di inviare il cookie con questi server di primo livello
navigazioni. Ad esempio, se un altro sito fa riferimento ai contenuti del tuo sito, in
questo caso utilizzando la foto del tuo gatto e fornendo un link al tuo articolo come
che segue:
<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>
Con un cookie impostato su Lax
come segue:
Set-Cookie: promo_shown=1; SameSite=Lax
Quando il browser richiede amazing-cat.png
per il blog dell'altra persona, la tua
il sito non invia il cookie. Tuttavia, quando il lettore segue
inserisci un link a cat.html
sul tuo sito, la richiesta non include il cookie.
Ti consigliamo di utilizzare SameSite
in questo modo, impostando i cookie che influiscono sul sito web
la visualizzazione a Lax
e i cookie relativi alle azioni dell'utente per Strict
.
Puoi anche impostare SameSite
su None
per indicare che vuoi che il cookie sia
inviati in tutti i contesti. Se fornisci un servizio utilizzato da altri siti, ad esempio
widget, contenuti incorporati, programmi di affiliazione, pubblicità o accesso
più siti, utilizza None
per verificare che l'intento sia chiaro.
Modifiche al comportamento predefinito senza SameSite
Supporto dei browser
L'attributo SameSite
è ampiamente supportato, ma non è stato adottato su larga scala.
In passato, l'impostazione predefinita dei cookie senza SameSite
ne comportava l'invio
in tutti i contesti, il che espone gli utenti vulnerabili agli attacchi CSRF e
la fuga di informazioni. Incoraggiare gli sviluppatori a esprimere il loro intento
e per offrire agli utenti un'esperienza più sicura, la proposta IETF,
Cookie migliori in modo incrementale
presenta due modifiche chiave:
- I cookie senza un attributo
SameSite
vengono trattati comeSameSite=Lax
. - I cookie con
SameSite=None
devono anche specificareSecure
, il che significa che richiedono un contesto sicuro.
Entrambe queste modifiche sono compatibili con le versioni precedenti con i browser che hanno
ha implementato la versione precedente dell'attributo SameSite
, nonché
browser che non supportano versioni precedenti di SameSite
. Il loro scopo è quello di
ridurre il numero di sviluppatori fare affidamento sui browser comportamento predefinito impostando i cookie
il comportamento e l'uso previsto espliciti. I clienti che non riconoscono
SameSite=None
dovrebbe ignorarlo.
SameSite=Lax
per impostazione predefinita
Se invii un cookie senza specificare il relativo attributo SameSite
, il browser
tratta quel cookie come se fosse impostato su SameSite=Lax
. Consigliamo comunque
impostando esplicitamente SameSite=Lax
per rendere l'esperienza utente più coerente
tra i browser.
SameSite=None
deve essere sicuro
Quando crei cookie cross-site utilizzando SameSite=None
, devi impostarli anche
a Secure
per consentire al browser di accettarli:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
Puoi testare questo comportamento a partire da Chrome 76 attivando
about://flags/#cookies-without-same-site-must-be-secure
e da Firefox 69
impostando network.cookie.sameSite.noneRequiresSecure
in
about:config
Ti consigliamo inoltre di aggiornare il prima possibile i cookie esistenti in Secure
.
Se ti affidi a servizi che forniscono contenuti di terze parti sul tuo sito, assicurati
il provider di servizi aggiorna i cookie e aggiorna eventuali snippet
dipendenze sul tuo sito per assicurarti che utilizzi il nuovo comportamento.
Ricette di biscotti SameSite
Per ulteriori dettagli su come aggiornare i cookie per gestire correttamente questi
modifiche a SameSite=None
e le differenze nel comportamento del browser, consulta le
l'articolo di follow-up sulle ricette di biscotti SameSite.
Grazie per i contributi e il feedback di Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner e Vivek Sekhar.
Immagine hero cookie di Parco di Pile-Riin attivo Rimuovi schermo