SameSite cookies

L'attribut SameSite de l'en-tête de réponse HTTP Set-Cookie vous permet de déclarer si vos cookies doivent être restreints au site visité, à des tiers, ou à des sous-domaines du site actuel.

Valeurs

L'attribut SameSite accepte trois valeurs possibles :

Lax

Les cookies sont transférables depuis le site actuel vers des sites de niveaux inférieurs et seront envoyés lors de requêtes GET initialisées par des sites tiers. C'est la valeur par défaut des navigateurs les plus récents.

Strict

Les cookies ne seront envoyés qu'avec les requêtes effectuées sur le domaine de même niveau, et ne seront pas envoyées sur les requêtes vers des sites tiers.

None

Les cookies seront envoyés dans tous les contextes, rendant possibles les requêtes de type cross-origin.

None était la valeur par défaut des navigateurs, mais les navigateurs les plus récents optent désormais pour la valeur Lax comme valeur par défaut pour une meilleure défense contre les attaques de type cross-site request forgery (CSRF).

None requiert l'attribut Secure dans les dernières versions des navigateurs les plus récents. Voir plus bas pour plus d'informations.

Corriger les erreurs les plus communes

SameSite=None requiert Secure

Une alerte de ce type peut apparaître dans la console de votre navigateur :

Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.
Cookie “
myCookie” rejected because it has the “sameSite=none” attribute but is missing the “secure” attribute.

Cet alerte apparaît dans les cas où des cookies requièrent l'attribut SameSite=None et ne sont pas marqués Secure, étant donc refusés par le navigateur.

Set-Cookie: flavor=choco; SameSite=None

Pour corriger cette erreur, vous devez ajouter l'attribut Secure à vos cookies marqués avec l'attribut SameSite=None.

Set-Cookie: flavor=choco; SameSite=None; Secure

Un cookie Secure ne sera envoyé au serveur que par le biais de requêtes utilisant le protocole HTTPS. Il est à noter que les sites non sécurisés (http:) ne peuvent pas être marqués Secure.

Les cookies sans l'attribut SameSite utilisent SameSite=Lax par défaut

Les dernières versions des navigateurs récents fournissent une valeur par défaut de SameSite plus sécurisée pour vos cookies, il se peut donc que le message suivant apparaisse dans la console de votre navigateur :

Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.
Cookie “
myCookie” has “sameSite” policy set to “lax” because it is missing a “sameSite” attribute, and “sameSite=lax” is the default value for this attribute.

Cette alerte apparait car la stratégie de SameSite pour le cookie n'a pas été spécifiée explicitement :

Set-Cookie: flavor=choco

Même si vous pouvez compter sur la valeur par défaut SameSite=Lax des navigateurs récents, vous devriez tout de même spécifier la stratégie à appliquer pour ce cookie afin de communiquer clairement votre intention. Cela améliorera également l'expérience sur les autres navigateurs si ceux-ci n'utilisent pas encore la valeur par défaut Lax.

Set-Cookie: flavor=choco; SameSite=Lax

Exemples

RewriteEngine on
RewriteBase "/"
RewriteCond "%{HTTP_HOST}"       "^example\.org$" [NC]
RewriteRule "^(.*)"              "https://www.example.org/index.html" [R=301,L,QSA]
RewriteRule "^(.*)\.ht$"         "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:01:https://www.example.org:30/:SameSite=None:Secure]
RewriteRule "^(.*)\.htm$"        "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:02:https://www.example.org:30/:SameSite=None:Secure]
RewriteRule "^(.*)\.html$"       "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:03:https://www.example.org:30/:SameSite=None:Secure]
[...]
RewriteRule "^admin/(.*)\.html$" "admin/index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:09:https://www.example.org:30/:SameSite=Strict:Secure]

Spécifications

Spécification Titre
RFC 6265, section 4.1: Set-Cookie HTTP State Management Mechanism
draft-ietf-httpbis-rfc6265bis-05 Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi