Tous les articles

Cookies : comment un petit bout de texte conserve l'état d'une session

En France, la CNIL a une doctrine plus stricte que le simple texte du RGPD : elle exige que refuser les cookies soit aussi simple qu'accepter, en un seul clic des deux côtés — c'est ce qui a valu à plusieurs grands sites des amendes de plusieurs millions d'euros pour avoir affiché un bouton "Tout accepter" bien visible à côté d'un lien "Paramétrer" minuscule menant à un second écran pour refuser. Elle a aussi rendu illégaux les "cookie walls" qui bloquent l'accès au contenu tant que l'utilisateur n'a pas accepté le tracking.

L'attribut Secure

L'attribut Secure indique au navigateur de n'envoyer le cookie que via une connexion HTTPS chiffrée. Sans lui, le cookie peut transiter en clair par HTTP, ce qui l'expose à une interception sur un réseau non sécurisé — le wifi public d'un café, par exemple.

L'attribut HttpOnly

Un cookie marqué HttpOnly ne peut pas être lu depuis JavaScript (document.cookie). C'est la défense la plus directe contre le vol de session par XSS : même si un attaquant parvient à injecter un script sur la page, il ne pourra pas accéder à un cookie de session portant cet attribut.

L'attribut SameSite

L'attribut SameSite restreint l'envoi d'un cookie lors de navigations entre sites différents, et constitue la principale défense contre les attaques CSRF. Strict bloque entièrement l'envoi intersites, Lax — la valeur par défaut de tous les navigateurs modernes — l'autorise dans des cas comme le fait de suivre un lien, et None lève la restriction, mais exige alors aussi l'attribut Secure.

Pourquoi c'est utile

  • Configurer un cookie de session sécurisé pour sa propre application web.
  • Vérifier quels cookies tiers un site charge réellement avant de rédiger le bandeau exigé par la CNIL.
  • Diagnostiquer pourquoi un cookie n'est pas stocké ou envoyé dans certains scénarios.

L'attribut Partitioned et l'avenir sans cookies tiers

Dans le cadre de l'initiative CHIPS (Cookies Having Independent Partitioned State), l'attribut Partitioned permet à un site intégré dans un <iframe> d'avoir une version différente de son cookie pour chaque site parent qui l'héberge, plutôt qu'un seul cookie partagé entre tous. C'est un compromis entre le blocage total des cookies tiers — qui casse des widgets légitimes comme le paiement ou le chat en ligne — et l'ancien modèle où un seul cookie publicitaire pouvait suivre un utilisateur sur tout le web.

Essayer l'outil