
Formation interactive à la programmation sécurisée avec des exercices SCORM pratiques couvrant les vulnérabilités web et API du Top 10 OWASP, l'exposition de secrets Git, et des exemples de remédiation dans plus de 10 langages.
40 exercices gratuits et open source de sécurisation du code qui enseignent la sécurité des applications web comme les développeurs apprennent — en exploitant de véritables vulnérabilités comme l'injection SQL, le cross-site scripting (XSS) et le contrôle d'accès défaillant, puis en écrivant le correctif. Modules SCORM interactifs couvrant l'OWASP Top 10 pour le Web, l'API, la sécurité des dépôts Git et bien plus encore. Exemples de correction en JavaScript, TypeScript, Java, C#, Python, Scala, PHP, Ruby, Go et Kotlin.

👥 Discutez avec les fondateurs | 🔗 Parcourez la bibliothèque complète | 🎮 Essayez une démo XSS DOM en direct
Lire l'OWASP Top 10 une fois par an et réussir un quiz à choix multiples n'empêche pas les vulnérabilités des applications web en production. Les développeurs doivent voir ce que fait une véritable exploitation — l'injection SQL qui vide une base de données, le cross-site scripting qui détourne une session, le contrôle d'accès défaillant qui expose les données d'un autre utilisateur — puis écrire le code sécurisé qui l'arrête.
Chaque exercice de cette bibliothèque suit une méthodologie en trois phases : exploiter, tracer, corriger.
Vous effectuez un test d'intrusion pratique contre une application volontairement vulnérable — injection SQL dans une base de données, XSS qui se déclenche dans un navigateur, SSRF qui atteint le point de terminaison des métadonnées cloud — puis vous tracez exactement comment la vulnérabilité a été introduite et appliquez les bonnes pratiques de sécurisation du code pour la corriger.
Les exercices couvrent :
Chaque exercice se termine par un quiz avec un seuil de réussite de 100 %. Au moment où un développeur écrit du code de production, il a déjà exploité toutes les vulnérabilités courantes des applications web et connaît les bonnes pratiques de sécurisation du code qui les empêchent.
Chaque exercice est fourni sous forme de zip SCORM 1.2 — importez-le dans n'importe quel LMS (Moodle, SAP SuccessFactors, Cornerstone, TalentLMS, ou tout système compatible SCORM), intégrez-le à votre pipeline de formation SDLC, ou prévisualisez-le sur SCORM Cloud avant le déploiement.
Marque blanche — pas de logos, pas de backlinks, pas de dépendance à un fournisseur. Utilisez-les dans le cadre d'un programme DevSecOps, d'une initiative SDLC sécurisée, ou comme formation autonome à la sécurité des applications.
Sous licence Creative Commons Attribution-NonCommercial 4.0 International. Vous pouvez utiliser, adapter et redistribuer avec attribution à des fins non commerciales — formation interne, ateliers, cours universitaires. La revente du contenu en tant que produit autonome n'est pas autorisée.
Besoin d'une formation à la sécurisation du code à grande échelle sans gérer votre propre LMS ? Nous proposons une plateforme cloud d'entreprise conçue spécialement pour la formation à la sécurité des applications au sein des équipes d'ingénierie. Contactez-nous pour la voir en action.
Multilocataire dès la conception — proposez une formation à la sécurité des applications sur l'ensemble de votre portefeuille clients depuis un panneau unique :
Intéressé ? Contactez-nous
Clickjacking — Voler un clic sur un bouton d'approbation bancaire en superposant un iframe transparent, en capturant une approbation réelle, et en livrant CSP frame-ancestors.
Command Injection — Enchaîner une seconde commande à un outil côté serveur en modifiant une requête capturée, en observant les secrets serveur fuiter, et en livrant l'exécution via liste d'arguments.
Components with Known Vulnerabilities — Obtenir l'exécution de code via une bibliothèque obsolète en exploitant une CVE publiée, en exécutant des commandes via un téléversement malveillant, et en mettant à jour la version et en analysant dans le CI.
Cross-Site Request Forgery — Transférer de l'argent depuis une page que la victime n'a jamais approuvée en soumettant automatiquement un transfert cross-site, en comprenant pourquoi les cookies suivent, et en ajoutant des jetons par session et SameSite.
Directory Traversal — Lire des fichiers système via un lien de téléchargement en sortant du dossier prévu, en récupérant /etc/passwd depuis le serveur, puis en canonicalisant et en vérifiant.
DOM XSS — Déclencher un XSS que le serveur ne voit jamais en cachant une charge utile dans le hash de l'URL, en traçant un sink innerHTML non sécurisé, et en le remplaçant par textContent.
Forced Browsing — Récupérer une exportation de données personnelles (PII) d'un employé depuis une route non liée en atteignant une URL interne anonymement, en comprenant pourquoi l'obscurité n'est pas un contrôle d'accès, et en appliquant l'authentification côté serveur.
Horizontal Privilege Escalation — Changer un chiffre et lire les données d'un autre client en parcourant un IDOR dans les deux sens, en énumérant des identifiants séquentiels, et en ajoutant le contrôle de propriété manquant.
Broken Function Level Authorization — Appeler des points de terminaison réservés au personnel depuis un compte en lecture seule en atteignant des routes admin en tant qu'analyste, en récupérant un effectif et en planifiant un paiement, et en ajoutant une protection par rôle au niveau du routeur.
Broken Object Level Authorization — Échanger un identifiant et lire les données d'un autre passager en modifiant l'identifiant d'objet dans une requête, en récoltant des enregistrements en parcourant les identifiants, et en appliquant une propriété par objet.
Broken User Authentication — Tester par force brute un code de connexion à six chiffres en attaquant un point de terminaison de vérification sans limite, en prenant le contrôle avec seulement un e-mail, et en limitant le débit par compte avec 429.
Excessive Data Exposure — Lire les champs que l'interface n'affiche jamais en comparant la page rendue au JSON brut, en trouvant le téléphone, la date de naissance et les coordonnées, et en sérialisant une liste blanche de champs.
Improper Inventory Management — Lire des enregistrements via une version d'API retirée en remplaçant v2 par une v1 dépréciée, en contournant les contrôles imposés par la nouvelle version, et en retirant les anciennes versions avec 410 Gone.
Injection — Transformer une zone de recherche en lecture complète de la base de données en s'extrayant d'une requête de catalogue, en vidant la table des utilisateurs avec UNION, et en paramétrant pour que l'entrée reste des données.
Insufficient Logging & Monitoring — Consulter les données d'un client sans laisser de trace en accédant à un enregistrement sans ticket, en comprenant pourquoi personne ne peut l'attribuer, et en ajoutant des journaux d'audit et des alertes.
— Créer un solde de fidélité avec deux clés supplémentaires en ajoutant des champs au corps d'un PATCH, en écrivant des attributs que vous ne devriez pas posséder, et en ne liant que les champs modifiables.
Secrets in Git History — Récupérer une clé API active depuis le commit qui l'a supprimée en parcourant l'historique d'un fichier de configuration nettoyé, en rejouant une clé qui n'a jamais été révoquée, et en la révoquant d'abord puis en purgeant avec git filter-repo.
Exposed .git Directory — Reconstruire une base de code entière depuis une seule URL publique en trouvant un .git navigable à la racine web, en extrayant le dépôt et en récupérant le code source, et en déployant les artefacts de build au lieu du dépôt.
Committed Secret Files — Cloner un dépôt public et lire son .env commit en repérant les fichiers secrets suivis depuis le premier commit, en les retirant du suivi avec git rm --cached et en les révoquant, et en ajoutant un .gitignore ainsi qu'un hook pre-commit.
Commit Author Spoofing — Installer une porte dérobée sous le nom d'un mainteneur en récoltant une identité d'auteur depuis git log, en lisant le badge de signature « Unverified », et en exigeant des commits signés pour tous les contributeurs, y compris les administrateurs.
Branch Protection Bypass — Faire un force-push sur main et contourner la revue et le CI en réécrivant l'historique sur une branche non protégée, en envoyant du code non relu directement en production, et en exigeant des pull requests, des relecteurs et des vérifications.
Leaked Access Tokens — Cloner des dépôts privés avec un jeton provenant d'un gist public en vérifiant ce qu'un jeton aux permissions trop larges peut atteindre, en le révoquant et en le renouvelant au lieu de simplement supprimer le gist, et en réémettant des jetons fins et à courte durée de vie.
Malicious Pull Requests — Attraper une porte dérobée cachée dans un correctif de test anodin en lisant le diff complet au lieu de la description, en signalant les modifications hors périmètre des scripts de déploiement, et en renforçant la revue avec CODEOWNERS et des limites sur les forks.
Host Header Injection — Rediriger un e-mail de réinitialisation de mot de passe vers un domaine imitant l'original en forgeant l'en-tête X-Forwarded-Host, en volant le jeton de réinitialisation cliqué, et en épinglant une URL de base configurée.
Insecure URL Redirect — Masquer une page de phishing derrière une vraie page de connexion en abusant du paramètre next, en comprenant pourquoi le domaine semble légitime, et en n'autorisant que des cibles relatives.
Leftover Debug Code — Extraire des secrets de production d'une route de débogage oubliée en trouvant un point de terminaison qui vide l'environnement, en lisant les secrets JWT et base de données, et en échouant en mode fermé avec une liste blanche.
PII in URL — Extraire des données personnelles directement d'un lien en repérant les identifiants dans les chaînes de requête, en suivant la fuite dans les journaux et les referrers, et en réécrivant vers des jetons opaques.
Reflected XSS — Créer une URL malveillante qui s'exécute dès son ouverture en réfléchissant une charge utile via une page de recherche, en comprenant le flux « la victime clique sur le lien », et en échappant au niveau du rendu.
Server-Side Request Forgery — Faire en sorte que le serveur récupère ses propres identifiants cloud en abusant d'une fonctionnalité d'aperçu de lien, en atteignant le point de terminaison des métadonnées, et en validant les destinations sortantes.
Session Fixation — Planter un identifiant de session et hériter de la connexion de la victime en fixant un identifiant connu sur la victime, en observant la connexion le réutiliser, et en le régénérant à chaque connexion.
SQL Injection — Vider une base de données via un formulaire de recherche non protégé en exploitant une charge utile de tautologie, en exfiltrant les tables avec UNION SELECT, et en livrant le correctif paramétré.
Stored XSS — Planter un script dans un commentaire et le voir se déclencher en stockant une charge utile dans du contenu utilisateur, en la voyant s'exécuter pour le visiteur suivant, et en échappant la sortie au moment du rendu.
Token Exposure in URL — Rejouer un jeton de session récolté dans un journal de referrers en attrapant un jeton dans une URL de redirection, en le rejouant dans un compte actif, et en le déplaçant dans un cookie HttpOnly.
User Enumeration — Récolter une liste de clients vérifiés depuis un formulaire de connexion en lisant des corps d'erreur différents, en mesurant les fuites de temps de réponse, et en uniformisant les erreurs et les temps.
Vertical Privilege Escalation — Forger une revendication de rôle et devenir administrateur en altérant le jeton de session, en passant de lecteur à administrateur, et en vérifiant les jetons avant de leur faire confiance.
Weak Randomness — Prédire un jeton de réinitialisation de mot de passe et prendre le contrôle du compte en échantillonnant des jetons du générateur, en récupérant l'état de Math.random(), et en passant à crypto.randomBytes.
XXE Injection — Lire le fichier de mots de passe via un téléversement XML en soumettant un bon de commande malveillant, en résolvant une entité externe, et en désactivant la résolution d'entités.
Security Misconfiguration — Lire les données d'un compte connecté depuis n'importe quel site web en reflétant une origine CORS arbitraire, en transformant une page piège en arme, et en limitant CORS à une liste blanche.
Unrestricted Resource Consumption — Extraire un catalogue avec une seule requête surdimensionnée en définissant la taille de page depuis la requête, en récupérant 250 000 enregistrements d'un coup, et en plafonnant la taille de page côté serveur.
CI/CD Secret Exposure — Extraire une clé de déploiement directement d'un journal de build public en trouvant l'étape de workflow qui affiche un secret, en empêchant les entrées non fiables de s'exécuter comme commandes shell, et en épinglant les actions par SHA de commit et en renouvelant la clé.