Qu'est-ce que Cookie (cookie HTTP) ?

Petite donnée formée d'un nom et d'une valeur, qu'un serveur web fait enregistrer par le navigateur au moyen de l'en-tête Set-Cookie. Le navigateur la joint ensuite automatiquement, dans l'en-tête Cookie, aux requêtes suivantes vers le même site. On y place souvent un identifiant de session pour conserver l'état de connexion avec HTTP, qui est sans état. Son traitement se précise par des attributs comme Secure (envoi uniquement en HTTPS), HttpOnly (illisible par les scripts), SameSite (jointure ou non aux requêtes initiées depuis d'autres sites) et Expires ou Max-Age (date d'expiration).

Nom japonais: Cookie

« Cookie (cookie HTTP) » apparaît dans 6 questions d'entraînement réparties sur 2 thèmes, dont Bases des technologies web, Bases de la sécurité de l'information.

Domaine: Bases des technologies web

Fonctionnement

Le serveur ajoute à sa réponse un en-tête comme « Set-Cookie: sid=… », que le navigateur enregistre. Ensuite, le navigateur joint automatiquement « Cookie: sid=… » aux requêtes vers le même site (la portée fixée par les attributs Domain et Path). À partir de l'identifiant de session reçu, le serveur retrouve les informations de l'utilisateur qu'il a conservées de son côté. Un cookie sans date d'expiration disparaît généralement à la fermeture du navigateur.

Attributs de sécurité

Avec Secure, le cookie n'est envoyé que sur des communications HTTPS, ce qui empêche que sa valeur soit découverte par écoute. Avec HttpOnly, le JavaScript de la page ne peut pas le lire, ce qui limite les dégâts d'un vol d'identifiant de session par XSS. SameSite indique, par Strict, Lax ou None, si le cookie est joint aux requêtes initiées depuis d'autres sites ; c'est l'une des contre-mesures contre les attaques qui font envoyer des requêtes à l'insu de l'utilisateur.

Différences avec le localStorage

Le localStorage est aussi un mécanisme d'enregistrement de données dans le navigateur, mais ses données ne sont pas jointes automatiquement aux requêtes : on les lit et les écrit depuis JavaScript. Un cookie est petit, en général environ 4 KB au plus chacun, et il est envoyé avec chaque requête vers le site concerné ; y mettre de grosses données augmente donc le trafic. Les informations d'authentification comme un identifiant de session sont généralement placées dans un cookie HttpOnly, illisible par les scripts.

S'entraîner : questions sur Cookie (cookie HTTP)

Quelle description d'une différence entre le localStorage du navigateur et les cookies est correcte ?

  1. ALes données du localStorage ne sont pas jointes automatiquement aux requêtes ; elles sont lues et écrites par le JavaScript des pages de la même origine
  2. BLes données du localStorage, comme les cookies, sont placées dans les en-têtes et envoyées automatiquement au serveur à chaque requête vers le même site
  3. CLe localStorage accepte aussi l'attribut HttpOnly : même si l'on y place un identifiant de session, les scripts de la page ne peuvent pas le lire
Afficher la réponse et l'explication

Réponse : A. Les données du localStorage ne sont pas jointes automatiquement aux requêtes ; elles sont lues et écrites par le JavaScript des pages de la même origine

Le localStorage est un espace de stockage du navigateur qui conserve des clés et des valeurs sous forme de chaînes, par origine ; il n'a aucun mécanisme de date d'expiration et ses données restent généralement jusqu'à leur suppression. Elles ne sont pas envoyées automatiquement au serveur : pour les envoyer, le JavaScript les place dans une requête. Un cookie est petit, en général environ 4 KB au plus chacun, et il est envoyé automatiquement à chaque requête, alors que le localStorage peut contenir des données plus volumineuses. En revanche, le JavaScript de la page peut le lire à tout moment, si bien qu'une faille XSS permet d'en voler le contenu. Ce risque doit être pris en compte lorsqu'on y place des valeurs servant à l'authentification.

Questions fréquentes

Que se passe-t-il si l'on désactive les cookies ?

L'identifiant de session ne peut plus être échangé, si bien que beaucoup de sites ne peuvent plus garder l'utilisateur connecté. Les informations mémorisées par des cookies, comme le contenu du panier ou les préférences d'affichage, ne sont pas conservées non plus.

Qu'est-ce qu'un cookie tiers ?

C'est un cookie défini par un autre site que celui de la page consultée (par exemple un site qui diffuse des publicités). Comme ils ont servi à suivre le comportement des utilisateurs d'un site à l'autre, certains navigateurs, pour protéger la vie privée, ne les envoient pas par défaut ou les restreignent.

« Cookie (cookie HTTP) » dans les explications

Questions mentionnant « Cookie (cookie HTTP) » (6)

  1. Quelle description du cookie défini par l'en-tête ci-dessus est correcte ?
  2. Quelle description d'une différence entre le localStorage du navigateur et les cookies est correcte ?
  3. HTTP est un protocole sans état. Quelle description de ce que cela signifie et de la façon habituelle dont un site web garde un utilisateur connecté est correcte ?
  4. Une application web de forum présentait une vulnérabilité par laquelle des scripts contenus dans des textes publiés par des utilisateurs s'exécutaient dans le navigateur des autres visiteurs. Quelle combinaison indique correctement le nom de cette vulnérabilité et sa contre-mesure fondamentale ?
  5. Une application web présente une vulnérabilité : si un utilisateur connecté ouvre une page piège préparée par un attaquant, son navigateur envoie au site légitime des requêtes qu'il n'a pas voulues, comme un virement ou une modification de paramètres. Quelle contre-mesure est appropriée ?
  6. Si une application web conserve le même identifiant de session avant et après la connexion, un attaquant peut amener l'utilisateur à utiliser un identifiant de session préparé à l'avance, puis, une fois l'utilisateur connecté, usurper son identité avec cet identifiant. Quelle est la contre-mesure la plus appropriée contre cette attaque ?

Termes associés

Cross-site scripting (XSS) HTTP (Hypertext Transfer Protocol) API REST Boucle d'événements (event loop) Code d'état HTTP CORS (partage des ressources entre origines) DOM (Document Object Model) JSON (JavaScript Object Notation) JWT (JSON Web Token) Méthode HTTP

Retour au glossaire