TW3 — Technologies du Web 3

đŸȘ Sessions et Cookies

La gestion des sessions et des cookies est essentielle dans le fonctionnement des systÚmes web modernes, en particulier pour maintenir une expérience utilisateur cohérente et sécurisée.

Sessions et cookies

Les requĂȘtes HTTP sont stateless (sans Ă©tat) : les sessions et les cookies permettent de suivre l'Ă©tat d'un utilisateur entre plusieurs requĂȘtes, afin de maintenir une expĂ©rience cohĂ©rente et sĂ©curisĂ©e.


đŸȘ 1. MĂ©canismes de Session cĂŽtĂ© Serveur

Les sessions cĂŽtĂ© serveur consistent Ă  stocker des informations utilisateur directement sur le serveur pour permettre une authentification continue ou suivre l’état d’une interaction.

Principe :

  • Lorsqu'un utilisateur se connecte, une session est créée cĂŽtĂ© serveur. Cette session contient des donnĂ©es spĂ©cifiques, comme l'identifiant de l'utilisateur, ses permissions ou d'autres paramĂštres.
  • Un identifiant unique de session (Session ID) est gĂ©nĂ©rĂ© pour l'utilisateur et envoyĂ© au navigateur sous forme de cookie.
  • Lors de chaque requĂȘte ultĂ©rieure, le navigateur renvoie le cookie contenant le Session ID, permettant au serveur de rĂ©cupĂ©rer les informations associĂ©es.

Étapes typiques :

  1. L'utilisateur envoie ses identifiants (par exemple, login et mot de passe).
  2. Le serveur vérifie les identifiants, crée une session et associe un Session ID.
  3. Le serveur envoie le Session ID au client, qui le stocke dans un cookie.
  4. Pour les requĂȘtes ultĂ©rieures, le serveur utilise le Session ID pour retrouver la session et l'Ă©tat utilisateur.

Avantages :

  • Centralisation des donnĂ©es sur le serveur (pas de donnĂ©es sensibles stockĂ©es cĂŽtĂ© client).
  • Permet un contrĂŽle strict des sessions (par exemple, expiration ou invalidation des sessions).

Inconvénients :

  • Les sessions consomment de la mĂ©moire sur le serveur, ce qui peut poser problĂšme Ă  grande Ă©chelle.
  • Les sessions doivent ĂȘtre synchronisĂ©es entre les serveurs si une architecture de type cluster est utilisĂ©e.

đŸȘ 2. Cookies SĂ©curisĂ©s

Les cookies sont des petits fichiers de texte stockés par le navigateur du client. Ils sont souvent utilisés pour transmettre les informations de session ou stocker des préférences utilisateur. Cependant, leur sécurité est cruciale pour éviter des attaques telles que le vol de session.

Voici les principales options de sécurité pour les cookies :

  1. HttpOnly :

    • Les cookies marquĂ©s comme HttpOnly ne sont pas accessibles via JavaScript. Cela protĂšge contre les attaques de type Cross-Site Scripting (XSS).
    • Exemple d’utilisation :
      Set-Cookie: session_id=abc123; HttpOnly
  2. Secure :

    • Les cookies marquĂ©s comme Secure ne sont envoyĂ©s qu’au serveur via des connexions HTTPS, ce qui protĂšge contre l’interception des donnĂ©es (attaque de type man-in-the-middle).
    • Exemple d’utilisation :
      Set-Cookie: session_id=abc123; Secure
  3. SameSite :

    • La directive SameSite contrĂŽle si un cookie peut ĂȘtre envoyĂ© avec des requĂȘtes intersites, rĂ©duisant ainsi les risques d’attaques Cross-Site Request Forgery (CSRF).
      • Strict : Les cookies ne sont envoyĂ©s qu’aux requĂȘtes provenant du mĂȘme site.
      • Lax : Les cookies sont envoyĂ©s aux requĂȘtes provenant d'autres sites, mais uniquement pour des mĂ©thodes de navigation "sĂ»res" (GET, HEAD).
    • Exemple d’utilisation :
      Set-Cookie: session_id=abc123; SameSite=Strict

đŸȘ Interactions entre Sessions et Cookies

  • Les cookies sont souvent utilisĂ©s pour transporter le Session ID entre le client et le serveur.
  • Les bonnes pratiques pour sĂ©curiser ces interactions incluent :
    • Toujours utiliser HttpOnly pour empĂȘcher l’accĂšs par JavaScript.
    • Activer Secure pour Ă©viter les fuites en cas de connexion non sĂ©curisĂ©e.
    • Configurer SameSite pour limiter les risques d’attaques intersites.

đŸ§Ÿ RĂ©sumĂ©

AspectMécanismes de SessionCookies Sécurisés
StockageDonnées sur le serveur.Données sur le client, souvent pour transporter des tokens.
SécuritéDépend de la gestion cÎté serveur (expiration, nettoyage).HttpOnly, Secure et SameSite pour renforcer la protection.
VulnérabilitésRisques d'invalidation insuffisante.Vol de session, attaques XSS ou CSRF si non sécurisés.

đŸ§Ș Exemple Pratique (Node.js avec Express)

Voici comment configurer une session sécurisée en Node.js avec des cookies.

Installer les dépendances :


npm install express-session

Code d’exemple :

const express = require('express');
const session = require('express-session');

const app = express();

app.use(session({
    secret: 'votre_secret',
    resave: false,
    saveUninitialized: false, // ne pas créer de session tant que rien n'y est stocké (RGPD, évite de saturer le store)
    cookie: {
        httpOnly: true, // Protéger contre les XSS
        secure: false,  // Activer uniquement si HTTPS est utilisé
        sameSite: 'lax' // Protection contre CSRF
    }
}));

app.get('/', (req, res) => {
    if (!req.session.views) {
        req.session.views = 1;
    } else {
        req.session.views++;
    }
    res.send(`Vous avez visité cette page ${req.session.views} fois.`);
});

const PORT = 3000;
app.listen(PORT, () => {
    console.log(`Serveur en cours d'exécution sur http://localhost:${PORT}`);
});

Ces concepts forment la base de la gestion des utilisateurs dans les applications web modernes. Ils permettent de garantir une expérience fluide tout en sécurisant les données sensibles.

Sous-sections

Authentification

Terminez le quiz du chapitre pour le marquer comme complété.

Tableau de bord

On this page