Florian Amette

Florian Amette

September 27, 2026

Enseigner le secure coding aux développeurs — plan de module et exercices DevSecOps

secure codingdéveloppeursDevSecOpsSASTOWASPformation
Enseigner le secure coding aux développeurs — plan de module et exercices DevSecOps

Enseigner le secure coding aux développeurs — plan de module et exercices DevSecOps

Le défi pédagogique : pourquoi les développeurs résistent à la sécurité

Former des développeurs au secure coding est un exercice pédagogique distinct de la formation cybersécurité classique. Les pentesteurs ou les étudiants en blue team arrivent avec une curiosité naturelle pour la sécurité. Les développeurs, eux, ont souvent un rapport ambivalent au sujet : ils savent que la sécurité est importante, mais la perçoivent comme un frein à la productivité, une contrainte externe imposée par des équipes de sécurité qu'ils voient rarement.

Cette résistance est compréhensible et doit être comprise avant d'être adressée. Elle naît de plusieurs tensions réelles dans le monde professionnel. Les délais de livraison sont serrés, les sprints agiles ne ménagent pas toujours de temps pour les revues de sécurité, et les outils de sécurité ont longtemps produit un nombre tel de faux positifs qu'ils étaient perçus comme du bruit plutôt que comme de l'aide.

Les leviers pédagogiques pour lever la résistance

La clé est de renverser le cadre narratif dès la première séance. Plutôt que de présenter le secure coding comme une liste d'interdictions ("ne faites jamais cela, n'utilisez jamais cela"), il s'agit de montrer que les pratiques de sécurité réduisent la dette technique, diminuent les bugs en production et facilitent les audits — trois problèmes que les développeurs expérimentés connaissent intimement.

Deux ressorts fonctionnent particulièrement bien en formation :

  • Les études de cas chiffrées : présenter le coût réel d'une vulnérabilité en production (temps de correction, communication de crise, revue d'audit) versus le coût de sa détection pendant le développement montre concrètement que le secure coding est un investissement rentable.
  • Les TP de "hack ce que tu as écrit" : faire corriger puis exploiter une vulnérabilité qu'ils ont eux-mêmes introduite (involontairement) crée une prise de conscience beaucoup plus puissante que n'importe quel cours magistral.

La différenciation pédagogique est également essentielle dans ce public. Un développeur junior de six mois d'expérience et un tech lead avec dix ans de pratique n'ont pas les mêmes représentations ni les mêmes angles morts. Le module doit prévoir des chemins distincts selon le niveau.

Prérequis étudiants

Avant d'entamer un module secure coding, les participants doivent maîtriser les bases suivantes :

  • Un langage principal : Python, Java ou JavaScript (Node.js). Le module peut être dispensé dans n'importe lequel de ces langages, les concepts étant transposables ; Python est recommandé pour la clarté des exemples d'injection SQL.
  • Les APIs REST : comprendre les verbes HTTP, le cycle requête-réponse, les codes de statut et la notion d'authentification par token.
  • Les bases du web : DOM, formulaires HTML, cookies, sessions — indispensables pour comprendre les vulnérabilités OWASP côté client (XSS, CSRF).
  • Git et une notion de pipeline CI/CD : pour les blocs 3 et 4, une expérience minimale avec GitHub Actions ou GitLab CI est un atout significatif.

Pour les formations courtes (moins de 16 heures), il est conseillé de distribuer en amont un kit de lecture de deux heures couvrant les bases HTTP et la gestion des sessions. Cela nivelle le groupe sans empiéter sur le temps de formation.

Plan de module en 4 blocs

Le module se structure en quatre blocs cohérents qui se renforcent mutuellement. Chaque bloc peut être dispensé de façon autonome dans un programme plus large, ou enchaîné pour un parcours intensif.

Bloc 1 — Menaces et surface d'attaque du code (fondations)

Ce bloc installe le cadre de pensée. L'objectif n'est pas encore de corriger des failles, mais de comprendre comment un attaquant pense le code. On y aborde la notion de surface d'attaque (tous les points d'entrée d'un système : formulaires, APIs, fichiers importés, variables d'environnement), les concepts de flux de données non fiables, et les grandes familles de vulnérabilités logicielles.

On introduit ici le secure coding comme discipline, en le distinguant du hardening système et du pentest réseau. L'étudiant sort de ce bloc avec une capacité à identifier les zones à risque dans une architecture avant même d'écrire une ligne de code.

Bloc 2 — OWASP Top 10 appliqué au développement

L'OWASP Top 10 est le référentiel de référence pour les vulnérabilités web les plus critiques. Il est connu des équipes de sécurité, mais souvent abordé par les développeurs sous l'angle "liste de choses à éviter" plutôt que sous l'angle mécanique : comment ces vulnérabilités apparaissent dans le code, pourquoi elles fonctionnent, et comment on les corrige à la source.

Ce bloc traite en profondeur les catégories les plus fréquentes dans les bases de code réelles : injections (SQL, commande, LDAP), mauvaise gestion de l'authentification, exposition de données sensibles, contrôle d'accès défaillant (IDOR), et mauvaises configurations de sécurité. Chaque catégorie est illustrée par un exemple de code vulnérable et sa version corrigée dans le langage du groupe.

Bloc 3 — Outillage SAST, DAST et SCA dans un pipeline

Ce bloc est le cœur technique du module. Il s'agit de faire passer les étudiants de la connaissance conceptuelle des vulnérabilités à leur détection automatisée dans un flux de développement réel. On y configure Semgrep (analyse statique), OWASP ZAP (analyse dynamique) et Trivy ou OWASP Dependency-Check (analyse de composition logicielle) dans un pipeline CI/CD.

L'accent pédagogique est mis sur l'interprétation des résultats — les faux positifs, la priorisation par criticité, la gestion du bruit — plutôt que sur la configuration avancée des outils.

Bloc 4 — Revue de code sécurisée et culture DevSecOps

Le dernier bloc aborde la dimension organisationnelle et collaborative. La revue de code sécurisée est présentée comme une pratique d'équipe, pas comme un audit ponctuel. On y travaille avec une grille de revue structurée couvrant les points de sécurité à vérifier systématiquement (validation des entrées, gestion des erreurs, secrets hardcodés, contrôle d'accès).

La seconde partie du bloc traite la culture DevSecOps : comment intégrer la sécurité dans les rituels agiles (définition of done, critères d'acceptation sécurité, security champions), et comment dialoguer efficacement entre équipes dev et sécu.

Tableau de découpage des séances (20-24 heures)

SéanceDuréeContenuObjectifs pédagogiquesOutils
13hSurface d'attaque, flux de données non fiables, taxonomie des vulnérabilités logiciellesIdentifier les zones à risque dans une architectureDiagrammes, OWASP Testing Guide
23hOWASP Top 10 — injections (SQL, commande), IDOR, exposition de donnéesLire et corriger du code vulnérable sur 3 catégoriesPython/Java vulnérable fourni
33hOWASP Top 10 — auth défaillante, CSRF, mauvaises configs, composants vulnérablesLire et corriger du code vulnérable sur 4 catégories supplémentairesCode samples, SSRF demo
44hSAST avec Semgrep et SonarQube : configuration, lecture des résultats, gestion des faux positifsConfigurer et interpréter un scan SAST sur un projet existantSemgrep, SonarQube Community
53hDAST avec OWASP ZAP sur une application cible, SCA avec TrivyExécuter un scan DAST, analyser les dépendances vulnérablesOWASP ZAP, Trivy
64hPipeline CI/CD sécurisé : intégration Semgrep + Trivy dans GitHub ActionsConstruire un pipeline qui bloque sur criticité hauteGitHub Actions, Semgrep, Trivy
74hPeer code review avec grille de sécurité, culture DevSecOps, security championsConduire et recevoir une revue de code sécuriséeGrille de revue, GitHub PR

Travaux pratiques détaillés

TP 1 — Fix de vulnérabilités dans du code fourni

C'est le TP fondateur du module. Les étudiants reçoivent une application web fonctionnelle mais délibérément vulnérable (une boutique en ligne simplifiée ou un gestionnaire de notes, selon le langage). Le code contient entre six et dix vulnérabilités connues, de criticité variable.

Vulnérabilités typiquement incluses :

  • Injection SQL : un formulaire de recherche construit la requête par concaténation de chaînes. La correction attendue est l'utilisation de requêtes préparées (prepared statements).
  • IDOR (Insecure Direct Object Reference) : un endpoint /api/documents/{id} renvoie le document sans vérifier que l'utilisateur connecté en est propriétaire. La correction passe par un contrôle d'accès explicite avant le retour des données.
  • SSRF (Server-Side Request Forgery) : une fonctionnalité "import depuis URL" accepte n'importe quelle URL, y compris des adresses de l'infrastructure interne (http://169.254.169.254/latest/meta-data/ sur AWS). La correction impose une liste d'autorisation de domaines externes.
  • Secret hardcodé : une clé API ou un token JWT en dur dans le code source. La correction utilise les variables d'environnement.
  • Gestion des erreurs exposant l'infrastructure : une stack trace Python ou Java retournée en clair dans la réponse HTTP. La correction implémente un gestionnaire d'erreurs générique côté client.

La correction est individuelle (ou en binôme pour les publics débutants). Les étudiants soumettent leur version corrigée via une pull request, ce qui prépare naturellement le TP suivant.

TP 2 — Pipeline CI/CD avec Semgrep et Trivy

À partir du dépôt corrigé lors du TP 1, les étudiants configurent un pipeline GitHub Actions (ou GitLab CI selon l'infrastructure disponible) qui exécute automatiquement :

  1. Semgrep sur les changements de code, avec une politique bloquant les merges en cas de finding de criticité haute ou critique.
  2. Trivy sur le fichier de dépendances (requirements.txt, package.json, pom.xml), avec alerte sur les CVE de score CVSS supérieur à 7.
  3. GitHub Dependabot (ou son équivalent GitLab) pour les alertes de sécurité en continu sur les dépendances.

L'évaluation du TP repose sur la démonstration : l'étudiant introduit volontairement une vulnérabilité dans une branche, soumet une PR et montre que le pipeline la détecte et bloque le merge.

TP 3 — Peer code review avec grille de sécurité

Les étudiants échangent leurs dépôts du TP 1 en binômes, puis conduisent une revue de code formelle en utilisant une grille standardisée. La grille couvre les points suivants :

  • Validation et assainissement des entrées (présence, type, format, longueur)
  • Contrôle d'accès sur chaque endpoint (authentification vérifiée, autorisation vérifiée)
  • Gestion des erreurs et journalisation (aucune donnée sensible dans les logs)
  • Gestion des secrets (aucune valeur en dur, utilisation correcte des variables d'environnement)
  • Dépendances (présence d'un outil SCA, dépendances à jour)
  • Commentaires de sécurité dans le code (documentation des choix de sécurité intentionnels)

Chaque finding est documenté sous forme de commentaire GitHub avec une description du problème, sa criticité estimée (informationnel / bas / moyen / élevé) et une suggestion de correction. Le binôme répond aux commentaires et propose des corrections. Cette dynamique de dialogue est précisément ce qui se passe dans une équipe DevSecOps réelle.

Différenciation débutant / confirmé

DimensionPublic débutant (< 1 an d'expérience)Public confirmé (> 3 ans d'expérience)
Profondeur OWASPTop 5 seulement, avec exemples très commentésTop 10 complet + vulnérabilités moins connues (SSRF, XXE, deserialization)
Outillage SASTInterface graphique SonarQube, règles par défautConfiguration Semgrep custom rules, YAML policies
Pipeline CI/CDGitHub Actions avec templates fournisConfiguration from scratch, choix de seuils par profil de risque
Code reviewGrille pré-remplie, reviewing par l'enseignantGrille vierge, reviewing croisé entre pairs, gestion des désaccords
ÉvaluationCorrection de 5 vulnérabilités guidéesAudit complet d'une application inconnue + rapport de findings

Pour les formations mixtes (niveaux hétérogènes), une structure en "noyau + extensions" fonctionne bien : tout le groupe réalise les TP de base, et les étudiants confirmés ont des extensions disponibles (configuration avancée Semgrep, ajout d'une analyse DAST automatisée, threat modeling de l'application qu'ils ont corrigée).

Outils du module

  • Semgrep : analyseur statique open source, multi-langages, s'intègre en CLI et dans les pipelines CI/CD. Version gratuite largement suffisante pour la pédagogie. Voir SAST.
  • SonarQube Community Edition : interface graphique, métriques de maintenabilité + sécurité, exportable en rapport. Déploiement local par Docker en dix minutes.
  • OWASP ZAP : proxy d'analyse dynamique, mode "automated scan" accessible aux débutants, API disponible pour l'intégration CI/CD.
  • Trivy : scanner de vulnérabilités multi-cibles (images Docker, dépendances, IaC), très rapide, idéal pour les pipelines CI/CD.
  • GitHub Dependabot : intégré à GitHub, alertes automatiques sur les dépendances vulnérables, pull requests de mise à jour automatiques.

Tous ces outils sont open source et utilisables sans licence payante, ce qui est essentiel pour les environnements académiques avec budget limité.

Liens avec certifications et métiers

Ce module est une préparation directe au métier de développeur sécurisé, profil de plus en plus recherché dans les équipes produit intégrant la sécurité en amont. Il prépare également au rôle de security champion dans les équipes agiles, ou à une spécialisation DevSecOps.

Du point de vue des certifications, le contenu couvre une partie significative des domaines abordés par des certifications comme le CSSLP (Certified Secure Software Lifecycle Professional) ou le niveau associé dans des parcours comme CompTIA Security+. Pour les formations longues intégrant un module DevSecOps, ce module secure coding en est le socle incontournable.

Les concepts de ce module se retrouvent également dans les formations AppSec, où la perspective est complémentaire : là où le secure coding forme les développeurs à écrire du code sûr, l'AppSec forme les testeurs à identifier les failles dans les applications. Les deux profils ont besoin de se comprendre pour travailler ensemble efficacement.

Ce qu'il faut retenir

Enseigner le secure coding aux développeurs demande une approche pédagogique radicalement différente d'un cours de cybersécurité classique. Le levier n'est pas la peur ou la contrainte réglementaire — c'est la démonstration que les pratiques de sécurité améliorent concrètement la qualité du code et réduisent la dette technique.

Un module structuré en quatre blocs (surface d'attaque, OWASP appliqué, outillage SAST/DAST/SCA, revue de code et culture DevSecOps) sur 20 à 24 heures couvre l'essentiel de ce qu'un développeur doit intégrer pour exercer dans un contexte DevSecOps moderne. Les TP — correction de code vulnérable, pipeline CI/CD, peer code review — sont les vecteurs pédagogiques les plus efficaces, car ils mettent les étudiants en situation réelle plutôt que dans une posture de consommation passive.

La différenciation débutant/confirmé est non négociable dans ce domaine : un public de développeurs seniors ayant déjà manipulé des vulnérabilités en production n'a pas les mêmes attentes ni les mêmes angles morts qu'un groupe de juniors sortant d'un bootcamp. Prévoir des extensions de TP et des questions de profondeur variable permet de satisfaire les deux profils sans ralentir l'ensemble du groupe.

Vous souhaitez intégrer un module secure coding dans votre programme ? Retrouvez nos intervenants spécialisés DevSecOps et secure coding sur cyberteachers.org, et explorez notre catalogue de cours secure coding et DevSecOps pour construire un programme adapté à votre contexte.

Tous les articles →

Transformez vos formations cybersécurité avec des experts

Expert qualifié en 24h • Formation sur-mesure • Consultation gratuite

Cyber Teachers