Chaque cookie contient une paire clé-valeur ainsi qu'un certain nombre d'attributs qui contrôlent quand et où ce cookie est utilisé.
L'introduction de l'attribut SameSite
(défini dans le document RFC6265bis) vous permet de déclarer si votre cookie est limité à un contexte propriétaire ou à un même site. Il est utile de comprendre exactement ce que signifie "site".
Le site combine le suffixe du domaine et la partie du domaine qui le précède. Par exemple, le domaine www.web.dev
fait partie du site web.dev
.
Terme clé: si l'utilisateur est sur www.web.dev
et demande une image à static.web.dev
, il s'agit d'une requête same-site.
La liste des suffixes publics définit les pages qui sont comptabilisées comme se trouvant sur le même site. Il ne dépend pas seulement des domaines de premier niveau tels que .com
, mais peut également inclure des services tels que github.io
. Ainsi, your-project.github.io
et my-project.github.io
peuvent être comptabilisés comme des sites distincts.
Terme clé: si l'utilisateur se trouve sur your-project.github.io
et demande une image à my-project.github.io
, il s'agit d'une requête intersite.
Utiliser l'attribut SameSite
pour déclarer l'utilisation des cookies
L'attribut SameSite
d'un cookie offre trois façons différentes de contrôler ce comportement. Vous pouvez choisir de ne pas spécifier l'attribut, ou utiliser Strict
ou Lax
pour limiter le cookie aux requêtes sur le même site.
Si vous définissez SameSite
sur Strict
, votre cookie ne peut être envoyé que dans un contexte propriétaire, c'est-à-dire si le site du cookie correspond à celui affiché dans la barre d'adresse du navigateur. Par conséquent, si le cookie promo_shown
est défini comme suit:
Set-Cookie: promo_shown=1; SameSite=Strict
Lorsque l'utilisateur visite votre site, le cookie est envoyé avec la requête, comme prévu.
Toutefois, si l'utilisateur suit un lien vers votre site à partir d'un autre, le cookie n'est pas envoyé lors de cette requête initiale.
Cette méthode est adaptée aux cookies liés aux fonctionnalités qui nécessitent toujours une navigation initiale, comme la modification d'un mot de passe ou la réalisation d'un achat, mais elle est trop restrictive pour un cookie comme promo_shown
. Si votre lecteur suit le lien pour accéder au site, il souhaite que le cookie soit envoyé pour que ses préférences puissent être appliquées.
SameSite=Lax
permet au navigateur d'envoyer le cookie avec ces navigations de premier niveau. Par exemple, si un autre site fait référence au contenu de votre site, en utilisant votre photo de chat et en fournissant un lien vers votre article comme suit:
<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>
Avec un cookie défini sur Lax
, procédez comme suit:
Set-Cookie: promo_shown=1; SameSite=Lax
Lorsque le navigateur demande amazing-cat.png
pour le blog de l'autre personne, votre site n'envoie pas le cookie. Toutefois, lorsque le lecteur suit le lien vers cat.html
sur votre site, cette requête inclut le cookie.
Nous vous recommandons d'utiliser SameSite
de cette manière, de définir les cookies qui affectent l'affichage du site Web pour Lax
et les cookies liés aux actions de l'utilisateur sur Strict
.
Vous pouvez également définir SameSite
sur None
pour indiquer que vous souhaitez que le cookie soit envoyé dans tous les contextes. Si vous fournissez un service utilisé par d'autres sites, tel que des widgets, du contenu intégré, des programmes d'affiliation, de la publicité ou une connexion sur plusieurs sites, utilisez None
pour vous assurer que votre intention est claire.
![Trois cookies libellés "Aucun", "Laxiste" ou "Strict" en fonction du contexte](https://web.dev/static/articles/samesite-cookies-explained/image/three-cookies-labelled-no-495f9afccf1cd.png?authuser=6&hl=fr)
None
, Lax
ou Strict
.
Modifications du comportement par défaut sans SameSite
Navigateurs pris en charge
- 80
- 86
- x
L'attribut SameSite
est largement accepté, mais il n'a pas été largement adopté.
Auparavant, la définition de cookies sans SameSite
permettait par défaut de les envoyer dans tous les contextes, ce qui rendait les utilisateurs vulnérables à la CSRF et aux fuites d'informations involontaires. Pour encourager les développeurs à indiquer leur intention et offrir aux utilisateurs une expérience plus sûre, la proposition de l'IETF (Initiativement meilleurs cookies) présente deux modifications clés:
- Les cookies sans attribut
SameSite
sont traités commeSameSite=Lax
. - Les cookies avec
SameSite=None
doivent également spécifierSecure
, ce qui signifie qu'ils nécessitent un contexte sécurisé.
Ces deux modifications sont rétrocompatibles avec les navigateurs qui ont correctement implémenté la version précédente de l'attribut SameSite
, ainsi qu'avec les navigateurs qui ne sont pas compatibles avec les versions antérieures de SameSite
. Ils sont destinés à réduire la dépendance des développeurs au comportement par défaut des navigateurs en rendant explicites le comportement des cookies et l'utilisation prévue. Tous les clients qui ne reconnaissent pas l'élément SameSite=None
doivent l'ignorer.
SameSite=Lax
par défaut
Si vous envoyez un cookie sans spécifier son attribut SameSite
, le navigateur le traite comme s'il était défini sur SameSite=Lax
. Nous vous recommandons toujours de définir explicitement SameSite=Lax
pour une expérience utilisateur plus cohérente sur tous les navigateurs.
SameSite=None
doit être sécurisé
Lorsque vous créez des cookies intersites à l'aide de SameSite=None
, vous devez également les définir sur Secure
pour que le navigateur les accepte:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
Vous pouvez tester ce comportement à partir de Chrome 76 en activant about://flags/#cookies-without-same-site-must-be-secure
, et depuis Firefox 69 en définissant network.cookie.sameSite.noneRequiresSecure
dans about:config
.
Nous vous recommandons également de remplacer les cookies existants par Secure
dès que possible.
Si vous utilisez des services qui fournissent du contenu tiers sur votre site, assurez-vous que votre fournisseur de services met à jour ses cookies, ainsi que tous les extraits ou dépendances de votre site pour qu'il utilise le nouveau comportement.
SameSite
recettes de cookies
Pour en savoir plus sur la mise à jour de vos cookies afin de gérer correctement ces modifications apportées à SameSite=None
et les différences de comportement du navigateur, consultez l'article suivant, Recettes de cookies SameSite.
Merci pour les contributions et les commentaires de Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner et Vivek Sekhar.
Cookie hero image par Pille-Riin Priske sur Unsplash