Authentification : Sessions

Les sessions constituent un mécanisme d'authentification fiable permettant de mémoriser le statut connecté d'un utilisateur lors de sa navigation.

Icône de calendrier
Intermédiaire
3 chapitres

Qu’est-ce qu’une session ?

Définition

Les sessions sont des mécanismes qui permettent de stocker temporairement sur le serveur, des données relatives à un utilisateur.

Identifiée par un ID, une session peut stocker tout type d’informations, telles que :

  • Des préférences utilisateur
  • Un panier d’achat
  • La langue courante du site
  • Un pseudo utilisateur
  • Etc.

Ces informations permettent de personnaliser l’expérience utilisateur tout au long de sa visite sur le site.

En conservant les données sur l’état actuel de la communication entre l’utilisateur (client) et le système (serveur), les sessions permettent de maintenir une continuité dans l’interaction.

On qualifie en ce sens les sessions de « stateful ».

Structure

Les informations de session sont généralement stockées :

  • Sous forme de fichiers (texte, binaire…)
  • Dans une base de données
  • Dans la mémoire vive du serveur

Fonctionnement des sessions

L’authentification par session fonctionne en 2 temps :

  1. La création de la session par le serveur
  2. Son exploitation par le client

Les schémas suivants détaillent chacune des ces étapes.

Création de la session

1. Génération d’une session unique

Le serveur crée une session pour cet utilisateur. Cette session est définie par un identifiant unique appelé « ID de session ».

Schéma d'authentification - Génération d'une session unique
Schéma d'authentification - Génération d'une session unique

2. Transmission de l’ID de session au client

L’ID de la session est renvoyé au navigateur via l’en-tête Set-Cookie de la réponse HTTP.

Ce dernier le stocke dans un cookie.

Schéma d'authentification - Transmission de l'ID de session au client
Schéma d'authentification - Transmission de l'ID de session au client

Exploitation de la session

3. Inclusion de l’ID de session dans les requêtes

Les cookies étant conçus pour être automatiquement renvoyés dans chaque requête du navigateur vers le serveur avec l’en-tête Cookie, l’identifiant de session sera systématiquement transmis.

Schéma d'authentification - Inclusion de l'ID de session dans les requêtes
Schéma d'authentification - Inclusion de l'ID de session dans les requêtes

4. Vérification de l’ID de session

Lorsque l’utilisateur accède à des pages restreintes ou effectue des actions qui nécessitent une authentification, le serveur vérifie simplement si l’ID de session correspond à une session active dans sa mémoire.

Schéma d'authentification - Vérification de l'ID de session
Schéma d'authentification - Vérification de l'ID de session

Une fois que l’utilisateur se déconnecte ou que sa session expire (généralement après une période d’inactivité prédéfinie ou lorsqu’il ferme son navigateur), l’ID de session devient invalide et l’utilisateur doit se reconnecter pour obtenir une nouvelle session.

Cela garantit la sécurité en limitant le temps d’accès aux ressources protégées par l’authentification.

Vulnérabilité à l’attaque CSRF

Le danger du CSRF lors de l’utilisation de l’authentification via session réside dans le fait qu’un attaquant peut exploiter une session authentifiée pour effectuer des actions non autorisées au nom de l’utilisateur sans que ce dernier ne le sache.

Lorsqu’un utilisateur est authentifié via une session sur le site https://exemple.com, son navigateur envoie automatiquement les cookies de session à chaque requête vers le serveur. Si une page web malveillante est conçue pour déclencher des actions sur le site auquel l’utilisateur est authentifié, alors ces actions pourraient être effectuées sans le consentement explicite de l’utilisateur.

Par exemple, un attaquant pourrait concevoir une page web https://evil.com qui, lorsqu’elle est visitée par un utilisateur authentifié sur un site, envoie des requêtes vers le site https://exemple.com pour effectuer des actions telles que changer le mot de passe, supprimer des données sensibles, ou effectuer des transactions financières.

Pour contrer ce risque, il est recommandé d’utiliser des jetons CSRF (CSRF tokens).

Vulnérabilité à la faille XSS

Outre le risque de CSRF, l’authentification par session est également sujette aux attaques par Cross-Site Scripting (XSS).

Un attaquant peut injecter du code JavaScript malveillant dans une page web https://exemple.com, consultée par un utilisateur authentifié.

Ce code peut ensuite dérober le cookie de session (avec document.cookies en JS) et l’envoyer sur le domaine du hacker https://evil.com, lui permettant d’exécuter des actions non autorisées au nom de l’utilisateur.

Pour contrer ce risque, il est recommandé de :

  • Valider rigoureusement les saisies des utilisateurs
  • Encoder les caractères spéciaux dans les sorties HTML pour empêcher l’exécution de code JavaScript.
  • Utilisant des cookies HttpOnly (inaccessibles côté client par JS)
  • Utiliser le protocole HTTPS pour crypter les communications et empêcher l’interception du cookie. L’attribut secure permet d’empêcher qu’un cookie ne soit communiqué en HTTP simple.