Attributs des cookies

Lorsqu'un serveur Web répond à une requête de ressource, il peut inclure un en-tête Set-Cookie avec sa réponse. Cet en-tête indique à votre navigateur de stocker un cookie. Exemple : Set-Cookie:cat=tabby. Que sont les cookies ? explique leur fonctionnement.

En plus de fournir un nom et une valeur de cookie, Set-Cookie peut inclure des attributs pour contrôler si les cookies sont définis et quand ils expirent. Les attributs de cookie sont séparés par des points-virgules. Exemple :

    Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;

Cet article explique les attributs de cookie les plus importants:

Utiliser des cookies HTTP explique les attributs des cookies de manière plus technique.

Sécurisé

👉 Vous devez inclure Secure par défaut pour tous les cookies.

Si un en-tête Set-Cookie inclut Secure, le cookie n'est inclus qu'avec les requêtes chiffrées qui utilisent le protocole HTTPS. Il n'est pas inclus dans les requêtes HTTP. Cela peut aider à arrêter les attaques par l'intermédiaire, dans lesquelles un pirate informatique intervient secrètement dans les communications entre le navigateur et le serveur pour transmettre des informations et les modifier potentiellement.

HTTPOnly

👉 Vous devez inclure HTTPOnly par défaut pour tous les cookies. N'omettez cette valeur que si vous avez besoin d'un accès JavaScript.

Si un en-tête Set-Cookie inclut HTTPOnly, le cookie ne peut pas être consulté à l'aide de document.cookie. Cela permet de se protéger contre certains types d'attaques ciblant les cookies.

SameSite

👉 SameSite=Lax est la valeur par défaut si aucune valeur n'est définie. SameSite=None autorise les cookies intersites, mais signifie que les cookies seront bloqués lorsque des restrictions de cookies tiers sont en place.

Une requête de ressource provenant d'un site différent de celui que vous consultez est une requête intersite. Un cookie défini en réponse à une requête intersites est appelé cookie tiers. En savoir plus: Que sont les cookies tiers ?

L'attribut SameSite détermine si un cookie tiers sera inclus dans une requête. Il peut prendre trois valeurs: Strict, Lax ou None.

Strict

Le cookie ne sera envoyé qu'en réponse aux requêtes d'une page située sur le site d'origine du cookie. Par exemple, imaginons qu'un utilisateur accède à cats.example et qu'un cookie est défini avec l'attribut SameSite=Strict. Plus tard, l'utilisateur se trouve sur un autre site et suit un lien vers une page sur cats.example. Le cookie défini ne sera pas inclus dans cette requête.

Lax

Cela fonctionne de la même manière que Strict, sauf que le navigateur inclut également le cookie lorsque l'utilisateur suit un lien vers le site d'origine du cookie. (Dans l'exemple Strict précédent, le cookie est inclus lorsque l'utilisateur suit le lien vers cats.example.) Lax est la valeur par défaut, si aucun attribut SameSite n'est inclus dans un en-tête Set-Cookie.

Aucun

Aucune contrainte: le cookie sera inclus avec une requête, qu'elle soit intersite ou non. Avec SameSite=None, le cookie doit également comporter l'attribut Secure.

En savoir plus: Explication des cookies SameSite

Partitionné

👉 Vous devez inclure l'attribut Partitioned par défaut si vous créez un cookie tiers, sauf si vous savez explicitement qu'il doit être partagé entre plusieurs intégrations.

Cet attribut vous permet d'activer un cookie pour le stockage partitionné, avec un "pot de biscuits" distinct par site de premier niveau. Le cookie est collecté deux fois, par le site de premier niveau et par le domaine qui le définit.

Par exemple, imaginons que le site Web A et le site Web B incluent tous deux une iframe du site Web C. Un cookie partitionné défini par l'iFrame sur le site Web A ne peut pas être consulté par l'iFrame sur le site Web B: le cookie AC est distinct du cookie BC.

Schéma illustrant le fait que deux sites Web différents intégrant un tiers commun ne partageront plus de cookies pour ce tiers.
Avec la partitionnement des cookies, un service tiers qui définit un cookie lorsqu'il est intégré à un site de premier niveau ne peut pas accéder à ce même cookie lorsque le service est intégré à d'autres sites de premier niveau.

Les cookies avec un attribut Partitioned sont appelés "CHIPS" (Cookies Having Independent Partitioned State).

Les cookies partitionnés doivent comporter l'attribut Secure.

En savoir plus: Cookies Having Independent Partitioned State

Expires et Max-Age

👉 Laissez de côté les attributs Max-Age et Expires, sauf si vous avez besoin d'un cookie qui dure plus longtemps que la session en cours. Les navigateurs expirent les cookies. Il n'est donc pas utile de définir une date d'expiration dans plusieurs années. À la place, vous devriez envisager d'actualiser les cookies lorsqu'un utilisateur revient sur votre site.

Vous pouvez spécifier une date et une heure Expires, ou une Max-Age en secondes, après lesquelles un cookie doit être supprimé et ne plus être envoyé. Exemple :

  • Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
  • Set-Cookie:cat=tabby; Max-Age=86400

Si vous ne spécifiez pas d'attribut Max-Age ou Expires, un cookie sera supprimé à la fin de la session en cours. Ce type de cookie est parfois appelé cookie de session.

Domaine

👉 Sauf si vous avez besoin d'inclure un cookie avec les requêtes vers les sous-domaines, n'incluez pas d'attribut Domain.

Si un en-tête Set-Cookie comporte un attribut Domain, le cookie est inclus avec les requêtes adressées au domaine spécifié et à ses sous-domaines.

Si un en-tête Set-Cookie ne comporte pas d'attribut Domain, le cookie n'est pas inclus avec les requêtes vers les sous-domaines.

En d'autres termes, l'inclusion de l'attribut Domain réduit les restrictions de domaine.

Par exemple, avec une réponse du site Web cats.example:

  • Set-Cookie:cat=tabby
    Le cookie ne sera inclus que dans les requêtes envoyées à cats.example.
  • Set-Cookie:cat=tabby; Domain=cats.example
    Le cookie sera inclus avec les requêtes envoyées à cats.example, ainsi que toutes les requêtes de ressources sur des sous-domaines tels que fluffy.cats.example ou user.assets.cats.example.

Chemin

👉 Incluez Path=/ avec un cookie si vous devez inclure le cookie dans toutes les requêtes vers n'importe quel chemin de votre site. Ne comptez pas sur Path pour la protection de la sécurité.

Si un attribut Path est inclus dans un en-tête de réponse Set-Cookie, le cookie défini ne sera inclus que dans les requêtes vers les URL (sur le site qui a défini le cookie) qui correspondent à la valeur Path.

Exemple :

  • Set-Cookie:cat=tabby; Path=/articles
    Le cookie sera inclus pour une requête vers un chemin d'URL commençant par /articles:
    https://cats.example/articles/tabby/index.html
    https://cats.example/articles/breeds/tabby/index.html
    https://cats.example/images/tabby.jpg
    https://cats.example/en/articles/tabby/index.html
  • Set-Cookie:cat=tabby; Path=/
    Toutes les requêtes vers une URL du site incluront le cookie.

Si un en-tête de réponse Set-Cookie ne comporte pas de valeur Path, le cookie n'est inclus que dans les requêtes adressées au même répertoire. Par exemple, imaginons qu'un cookie cat=tabby soit défini en réponse à une requête pour cats.example/images/tabby.jpg.. Si aucun Path n'est défini, le cookie ne sera inclus qu'avec les requêtes de fichiers dans le répertoire cats.example/images.

Démonstrations

Outils

En savoir plus