Objectifs du module :

  • Apprendre à sécuriser les sessions utilisateur et les cookies dans une application.
  • Comprendre et implémenter des systèmes d'authentification modernes et sécurisés (OAuth 2.0, JWT).
  • Sécuriser les API grâce à des mécanismes d'authentification, d'autorisation, et de contrôle d’accès.

1. Sécurisation des sessions et des cookies

a. Gestion de la session

Importance de la gestion des sessions :
Les sessions permettent de maintenir l'état d'authentification des utilisateurs après qu'ils se sont connectés. Une mauvaise gestion des sessions peut permettre à des attaquants de voler ou de manipuler des sessions d'utilisateurs.

Pratiques de sécurisation des sessions :

  • Utilisation de cookies de session sécurisés :
    Toujours utiliser des cookies marqués comme Secure (uniquement envoyés via HTTPS) et HttpOnly (non accessibles via JavaScript) pour éviter leur exfiltration.
  • Expiration des sessions :
    Définir une durée d'inactivité après laquelle la session expire automatiquement. Par exemple, 30 minutes sans activité doivent entraîner la déconnexion de l’utilisateur.
  • Renouvellement des sessions :
    Lors de l'authentification réussie, régénérer l'identifiant de session pour éviter les attaques de fixation de session.

b. Expiration des sessions et des cookies

Expiration des sessions :
Pour limiter les risques d'usurpation de session (session hijacking), il est essentiel de définir une expiration automatique des sessions après une certaine période d'inactivité.

Inactivité et expiration absolue :

  • Expiration par inactivité : définissez une durée maximale d'inactivité (ex. : 30 minutes).
  • Expiration absolue : définissez une durée maximale de vie de la session (ex. : 24 heures), même si l'utilisateur est actif.

Expiration des cookies :
Définir une expiration des cookies de session et d'authentification. Pour des sessions sensibles, il est recommandé d’utiliser des cookies de session (qui expirent une fois le navigateur fermé).

c. Cookies sécurisés

Utilisation des attributs Secure et HttpOnly :

  • Secure : Assure que le cookie n'est transmis qu'en HTTPS, empêchant son interception sur des connexions non sécurisées.
  • HttpOnly : Rend le cookie inaccessible via JavaScript, ce qui prévient les attaques XSS de voler les cookies.

Attribut SameSite :
Implémenter l’attribut SameSite pour les cookies afin de prévenir les attaques CSRF (Cross-Site Request Forgery). Cet attribut empêche les navigateurs d'envoyer des cookies de session avec des requêtes provenant de sites tiers.

Vidéo de Hafnium - Sécurité informatique:

2. Implémentation correcte des systèmes d’authentification (OAuth 2.0, JWT)

a. OAuth 2.0 : Protocole d’authentification et d’autorisation

Qu'est-ce que OAuth 2.0 ?
OAuth 2.0 est un protocole qui permet à une application (le client) d'obtenir un accès limité aux ressources d’un utilisateur hébergées sur un serveur (le fournisseur d'identité) sans avoir à transmettre son mot de passe.

Les flux OAuth 2.0 les plus courants :

  • Code d'autorisation (Authorization Code Grant) : Utilisé dans les applications web où l'utilisateur est redirigé vers le fournisseur d'identité pour autoriser l'accès à ses données. Il s'agit du flux le plus sécurisé.
  • Client Credentials Grant : Utilisé dans les communications serveur à serveur.
  • Implicit Grant (à éviter) : Utilisé dans les applications frontend. Ce flux n'est plus recommandé car moins sécurisé (le token d'accès est exposé à la vue).

Meilleures pratiques d'OAuth 2.0 :

  • Toujours utiliser le flux de code d'autorisation pour sécuriser les applications web et mobiles.
  • Limiter la durée de vie des tokens d'accès et utiliser des tokens de rafraîchissement (refresh tokens) pour prolonger les sessions de manière sécurisée.
  • Configurer des scopes d'accès minimaux pour chaque type de ressource.

Vidéo de Grafikart.fr:

b. JSON Web Token (JWT)

Qu'est-ce que le JWT ?
Le JWT est un standard de token signé utilisé pour la transmission sécurisée de données entre deux parties. Il est souvent utilisé dans les systèmes d'authentification modernes pour remplacer les sessions basées sur les cookies.

Structure d’un JWT :

  • Header : Indique l’algorithme de signature et le type de token.
  • Payload : Contient les revendications (claims), qui sont les données que l'on souhaite transmettre.
  • Signature : Crée une empreinte numérique du header et du payload, assurant que le token n’a pas été modifié.

Meilleures pratiques de JWT :

  • Utiliser des signatures sécurisées avec HMAC ou RSA pour signer les tokens.
  • Ne jamais stocker de données sensibles dans le payload du JWT, car il est encodé mais pas chiffré.
  • Utiliser des tokens de courte durée de vie et permettre leur rotation avec des tokens de rafraîchissement.

Vidéo de Grafikart.fr:

3. Sécurisation des API : Authentification, autorisation, et principes d’accès sécurisé

a. Authentification des API

Utilisation des tokens :
Les API doivent utiliser des systèmes basés sur des tokens (par exemple, OAuth 2.0 ou JWT) pour gérer l'authentification des utilisateurs et des services.

Requêtes sécurisées :

  • S’assurer que toutes les requêtes d'API passent par des connexions chiffrées (HTTPS).
  • Les tokens d'authentification doivent être envoyés dans l’en-tête Authorization pour limiter l'exposition dans les URL.

b. Autorisation des API

Contrôle d'accès basé sur les rôles (RBAC) :
Implémenter des mécanismes RBAC pour garantir que les utilisateurs n'ont accès qu'aux ressources et actions qui leur sont autorisées en fonction de leur rôle (ex. : utilisateur, administrateur, etc.).

Least privilege (privilège minimal) :
Toujours implémenter des politiques de privilège minimal, c'est-à-dire que chaque utilisateur ou service ne doit avoir que les permissions strictement nécessaires.

Scopes dans OAuth 2.0 :
Les scopes définissent les niveaux d'accès auxquels un token est autorisé. Par exemple, dans une API qui permet de lire et écrire des données utilisateur, deux scopes différents peuvent être définis : read:user et write:user.

c. Sécurisation des accès à l’API

Rate limiting (Limitation du nombre de requêtes) :
Pour éviter les abus ou les attaques par déni de service, implémenter des mécanismes de limitation des requêtes par utilisateur ou par service.

Logging et monitoring :

  • Journaliser les tentatives d'accès non autorisées et surveiller activement les journaux pour détecter des activités suspectes.
  • Mettre en place des alertes pour toute activité anormale sur l’API (par exemple, un nombre élevé d’échecs d’authentification).

CORS (Cross-Origin Resource Sharing) :
Pour les API exposées au public, configurer correctement les règles CORS pour restreindre l'accès uniquement aux domaines de confiance.

Conclusion du Module :

La gestion des authentifications et des autorisations est un domaine critique de la cybersécurité. En sécurisant les sessions, en implémentant des systèmes d'authentification robustes comme OAuth 2.0 et JWT, et en garantissant un contrôle strict des accès aux API, les développeurs peuvent réduire considérablement les risques liés à des attaques telles que le vol de session, l'abus d'API, ou les usurpations d'identité.

Formateur

Bertrand LECLERCQ

Consultant DevSecOps & Data Engineer


Avec 25 ans d'expérience dans le développement logiciel et une certification en Data Engineering de l'École des Mines Paris - PSL, je suis passionné par la cybersécurité, le big data et le DevOps. J'aime partager mes connaissances et aider la communauté à renforcer sa posture de sécurité.

J'ai créé une base de vulnérabilités librement accessible et je me forme en continu sur des plateformes comme TryHackMe. Mon objectif ? Démocratiser la cybersécurité et permettre à chacun de mieux comprendre les enjeux.

J'ai une solide expertise dans la conception et le déploiement de solutions sécurisées, ainsi qu'une expérience éprouvée dans la gestion de projets complexes. Maîtrisant un large éventail de technologies (Python, Go, Java, Docker, Kubernetes, etc.), je suis convaincu que la sécurité doit être intégrée dès le début du cycle de développement.

Le projet NoHackMe vous permet d'effectuer une veille Cyber, vous permet de découvrir le monde de la Cybersécurité ainsi qu'une section formation Cyber

Soutenez No Hack Me sur Tipeee