← Retour aux coursCybersécurité

Une application sûre se conçoit avant d’être testée.

Ce cours remplace l’ancien contenu manquant par une approche moderne et défensive : comprendre les risques OWASP 2025, réduire la surface d’attaque, protéger les données et savoir détecter puis corriger.

Niveau · débutant → intermédiaireLecture · 40–50 minDéfense uniquement
Illustration de sécurité Web
PrérequisWeb de base
ObjectifConstruire une checklist défensive
RéférencesOWASP + NIST

Objectifs d’apprentissage

  • comprendre les catégories OWASP Top 10:2025 ;
  • différencier authentification, autorisation et gestion de session ;
  • protéger secrets, données et dépendances ;
  • concevoir validation, erreurs et logs de manière sûre ;
  • intégrer la sécurité dans le cycle de développement ;
  • raisonner en prévention, détection, réponse et récupération.

1. Penser en actifs, frontières et confiance

Commence par identifier ce que l’application doit protéger : comptes, données personnelles, commandes, fichiers, clés, fonctions d’administration. Ensuite, repère les frontières entre navigateur, API, base de données et services externes.

Chaque frontière doit poser une question : qui demande quoi, et pourquoi cette action est-elle autorisée ?

2. OWASP Top 10:2025

OWASP classe les risques Web critiques afin d’aider développeurs et équipes sécurité à prioriser leurs efforts. L’édition 2025 place notamment le contrôle d’accès cassé en tête.

CatégorieIdée défensive
A01 Broken Access Controlvérifier les permissions côté serveur pour chaque action sensible
A02 Security Misconfigurationdésactiver les valeurs par défaut inutiles, limiter l’exposition, configurer explicitement
A03 Software Supply Chain Failuresinventorier, mettre à jour et vérifier les dépendances et processus de build
A04 Cryptographic Failuresutiliser des mécanismes modernes et protéger les clés/secrets
A05 Injectionséparer données et instructions, valider les entrées, utiliser les API sûres du framework
A06 Insecure Designpenser aux scénarios d’abus avant l’implémentation
A07 Authentication Failuresprotéger comptes, sessions, récupération et MFA
A08 Software or Data Integrity Failuresvérifier provenance, signatures et chaîne de déploiement
A09 Security Logging & Alerting Failuresjournaliser les événements utiles et détecter les anomalies
A10 Mishandling of Exceptional Conditionsprévoir les erreurs et défaillances sans divulguer d’informations sensibles

3. Contrôle d’accès : ne jamais faire confiance au client

Masquer un bouton dans l’interface n’est pas une autorisation. Le serveur doit vérifier l’identité, le rôle et la propriété de la ressource avant chaque opération sensible.

PrincipeLe client peut demander ; le serveur décide.
  • permissions minimales nécessaires ;
  • contrôles centralisés plutôt que dispersés ;
  • ressources filtrées selon l’utilisateur autorisé ;
  • actions d’administration séparées des actions publiques.

4. Authentification, sessions et récupération

L’authentification prouve une identité ; l’autorisation détermine ses droits. Une bonne architecture traite aussi la session, l’expiration, la déconnexion et la récupération de compte.

  • MFA pour les comptes sensibles lorsqu’elle est disponible ;
  • secrets jamais codés en dur ;
  • cookies de session configurés de manière appropriée ;
  • limitation des tentatives et alertes sur comportements anormaux ;
  • récupération de compte aussi robuste que la connexion principale.

5. Protéger les données et les secrets

HTTPS protège les données pendant le transport, mais il faut aussi limiter ce qui est collecté, protéger le stockage et éviter d’exposer les secrets au frontend.

Règle : une clé secrète placée dans JavaScript envoyé au navigateur n’est plus secrète.

Les mots de passe ne doivent pas être stockés en clair. Les applications doivent utiliser des mécanismes d’authentification et de hachage adaptés fournis par des bibliothèques reconnues plutôt que des algorithmes improvisés.

6. Entrées, sorties et injection

Une donnée venant d’un utilisateur, d’une URL, d’un fichier ou d’une API externe doit être considérée comme non fiable tant qu’elle n’a pas été validée selon le contexte.

  • valider le type, la longueur et les valeurs attendues ;
  • utiliser les requêtes paramétrées ou les abstractions sûres du framework ;
  • encoder les sorties selon leur contexte d’affichage ;
  • préférer textContent lorsqu’on affiche du texte dans le navigateur ;
  • éviter de construire dynamiquement des instructions à partir de chaînes non fiables.

7. Chaîne logicielle et dépendances

Une application dépend souvent de centaines de paquets, images de conteneur, actions CI/CD ou services. OWASP 2025 met davantage l’accent sur les défaillances de chaîne logicielle.

  • réduire le nombre de dépendances inutiles ;
  • suivre les mises à jour et avis de sécurité ;
  • verrouiller les versions avec les mécanismes de l’écosystème ;
  • protéger les comptes et secrets du pipeline de déploiement ;
  • examiner les nouvelles dépendances avant adoption.

8. Configuration sûre

Une application peut être vulnérable sans bug de code : mode debug actif, permissions trop larges, bucket public, headers absents, services inutiles ou comptes par défaut. La configuration doit être versionnée, revue et différente selon les environnements lorsque nécessaire.

9. Logs, alertes et réponse

Une défense efficace doit pouvoir répondre à la question : « que s’est-il passé ? ». Les logs doivent capturer les événements utiles sans enregistrer inutilement des secrets ou données sensibles.

  • échecs répétés de connexion ;
  • actions d’administration ;
  • changements de permissions ;
  • erreurs serveur anormales ;
  • événements critiques du déploiement.

Un plan simple de réponse prévoit aussi qui est contacté, comment isoler le problème, comment restaurer le service et comment tirer les leçons de l’incident.

10. Intégrer la sécurité au développement

  1. Avant de coder : identifier actifs, utilisateurs et scénarios d’abus.
  2. Pendant : appliquer validation, autorisation, gestion des secrets et dépendances.
  3. Avant déploiement : revue de configuration, tests, sauvegardes et logs.
  4. Après : mises à jour, surveillance, réponse et amélioration continue.

Cette vision rejoint le NIST CSF 2.0 : Govern, Identify, Protect, Detect, Respond, Recover.

Mini-lab défensif

Évalue une phrase secrète

Le calcul reste local au navigateur. L’objectif est de visualiser l’effet de la longueur et de la diversité, pas d’évaluer un vrai secret de production.

Aucune donnée saisie.

Exercice — revue défensive d’un mini-site

Sur un projet que tu possèdes, crée une checklist sans tenter de contourner quoi que ce soit : secrets dans le dépôt, dépendances obsolètes, pages d’administration exposées, validation des formulaires, permissions serveur, HTTPS, logs et sauvegardes. Pour chaque point, note « conforme », « à vérifier » ou « à corriger ».

Sécurité applicative · atelier progressif

Concevoir des contrôles d’accès avant les fonctionnalités

Une application sécurisée ne repose pas sur le fait de cacher les boutons. Le serveur doit vérifier l’identité et les permissions pour chaque ressource sensible. Il faut distinguer authentification (qui est la personne ?) et autorisation (que peut-elle faire ?). La validation des données protège l’intégrité ; l’encodage de sortie limite les risques d’injection ; une bonne journalisation sert au diagnostic sans enregistrer de mots de passe.

Pratique pas à pas

  1. Dessine les rôles visiteur, élève et enseignant d’une application scolaire fictive.
  2. Crée une matrice : cours public, devoir personnel, modification des notes. Indique les opérations autorisées pour chaque rôle.
  3. Dans une application que tu possèdes, vérifie que chaque action sensible est autorisée côté serveur. N’effectue aucun test sur des comptes, réseaux ou services sans permission explicite.

Exemple à essayer

// Pseudo-code côté serveur : principe d'autorisation
function peutLireDevoir(session, devoir) {
  if (!session?.userId) return false;
  return session.role === 'enseignant' ||
         devoir.eleveId === session.userId;
}

// Chaque requête doit demander l'autorisation,
// et pas seulement masquer un bouton dans le navigateur.

Ce que tu dois observer : Le visiteur sans session n’est jamais autorisé, tandis qu’un élève ne peut accéder qu’à son propre devoir. En production, les droits doivent aussi être contrôlés pour les mutations et les ressources liées.

Erreur fréquente : Croire qu’un token valide donne accès à toutes les données ou que les seules restrictions dans JavaScript côté client constituent une protection suffisante.

Vérifie que tu as compris

Quelle est la différence entre authentification et autorisation ?

L’authentification identifie l’utilisateur ; l’autorisation décide quelles actions il peut réaliser.

Pourquoi éviter d’enregistrer des mots de passe dans les logs ?

Parce qu’un journal peut être consulté, transféré ou conservé ; un secret enregistré devient une nouvelle surface de risque.

Une fois l’atelier réalisé et les questions comprises, valide cette étape dans ton parcours.

À retenir

  • La sécurité commence par la conception et le contrôle d’accès.
  • Le serveur doit vérifier les droits, même si l’interface semble bloquer l’action.
  • Les dépendances et le pipeline font partie de la surface de risque.
  • Les erreurs, logs, sauvegardes et plans de réponse comptent autant que la prévention.
  • Les tests restent limités aux environnements autorisés.
Pause active

Teste ta compréhension

Quel cadre convient à un audit de sécurité ?

Références

Parcours terminé

Retourner aux autres notes et projets.

Voir le journal →