La sécurité applicative est un enjeu majeur du développement web moderne. Avec la multiplication des cyberattaques — comme les récentes fuites chez France Travail ou LinkedIn — les données personnelles des utilisateurs et la réputation des entreprises sont gravement menacées.
Cet article vise à sensibiliser les développeurs aux vulnérabilités courantes et s’appuie sur des références reconnues :
- OWASP Top 10 : la liste des vulnérabilités critiques maintenue par la communauté,
- Recommandations de l’ANSSI : référence française en cybersécurité,
- Outils comme ZAP (Zed Attack Proxy) pour automatiser la détection de failles.
La sécurité web n’est pas une option à ajouter en fin de projet, mais un élément fondamental à intégrer dès la conception!
⚠️Failles majeures selon l’OWASP Top 10 (2025)
OWASP Top 10 représente un consensus d’experts sur les vulnérabilités web les plus critiques. La précédente version datait de 2021 ; une nouvelle édition a été publiée le 6 novembre 2025, actualisant ce classement.
Examinons maintenant les failles identifiées dans cette version :

A01:2025 – Contrôle d’accès défaillant
Cette vulnérabilité permet à un utilisateur d’accéder à des ressources normalement restreintes, ou de forcer le serveur à exécuter des actions non autorisées, y compris via des requêtes vers des sites externes (Server-Side Request Forgery, SSRF).
Exemples :
- Accéder à une interface d’administration simplement en modifiant l’URL (
https://exemple.com/utilisateur/profil→https://exemple.com/admin/dashboard. Si le serveur ne vérifie pas correctement les autorisations, cette requête peut donner accès à des fonctionnalités critiques comme la gestion des comptes utilisateurs, la suppression de données ou la modification des rôles. - Accéder directement à des ressources via des identifiants numériques : si un utilisateur authentifié à l’ID
123accède àhttps://exemple.com/commandes/456et que le serveur ne vérifie pas que la commande456lui appartient, il pourrait consulter ou même modifier les commandes d’autres utilisateurs. - Exploitation de SSRF par un attaquant des mécanismes du serveur pour envoyer des requêtes vers des sites contrôlés par lui, scanner des réseaux internes ou lancer des attaques sur d’autres cibles, en masquant ses traces.
Mesures de prévention :
- Implémenter des middlewares de vérification des rôles et valider systématiquement les autorisations côté serveur (jamais uniquement côté client)
- Utiliser un filtrage par ID sécurisé en vérifiant que l’ID demandé correspond à celui de l’utilisateur authentifié
- Utiliser une liste blanche d’URLs autorisées, et ne jamais faire confiance à une URL fournie par l’utilisateur sans validation stricte et approfondie

A02:2025 – Mauvaise configuration de sécurité
Les configurations par défaut ou mal sécurisées représentent une vulnérabilité majeure.
Exemples:
- Ports de développement ouverts en production peut exposer des interfaces de débogage non protégées,
- Fichier
.envcontenant des clés API ou des identifiants de base de données exposé sur sur un dépôt public - Configurations d’en-têtes HTTP insuffisantes
Mesures de prévention :
- Séparer strictement les environnements (développement, test, production).
- Utiliser un
.gitignorestrict pour éviter de versionner les fichiers sensible - Configurer correctement les en-têtes de sécurité (Content-Security-Policy, X-Frame-Options, etc.): par exemple avec Helmet pour Express
- Automatiser la vérification des configurations via des outils de scanning et des audits réguliers

A03:2025 – Chaîne logicielle non sécurisée
Cette vulnérabilité résulte de failles ou de mauvaises pratiques dans l’ensemble de la chaîne logicielle, depuis les dépendances jusqu’aux systèmes de build et de distribution.
Exemples:
- Supposer que la sécurité côté frontend suffit, ce qui permettrait à un utilisateur malveillant d’appeler directement une route d’administration cachée comme
/api/admin/deleteUservia un outil comme Postman, et de supprimer des comptes ou modifier des rôles. - Laisser des routes d’API publiques par défaut, comme
/api/exportData, qui retournent l’intégralité des utilisateurs ou des rapports internes sans aucune vérification d’authentification. Un attaquant pourrait ainsi télécharger toutes les données clients d’une application e-commerce ou l’historique des commandes. - Déployer automatiquement du code non vérifié dans un pipeline CI/CD, permettant à un développeur malintentionné ou un compte compromis d’injecter une porte dérobée dans l’application.
- Utiliser des dépendances externes obsolètes ou compromises, comme une librairie JavaScript populaire mais non patchée (ex. jQuery ou Express), qui permettrait l’exécution de scripts malveillants côté serveur ou côté client.
Mesures de prévention :
- Vérifier systématiquement l’intégrité et la provenance des dépendances et artefacts logiciels
- Mettre à jour régulièrement toutes les bibliothèques et composants utilisés (
npm audit fix, Snyk, OWASP Dependency Check) - Sécuriser les pipelines CI/CD et valider tout code avant déploiement
- Appliquer le principe du moindre privilège dans les accès aux environnements de build et de production.
- Intégrer la sécurité dès les premières phases de conception, en testant notamment les routes API et les permissions côté serveur.

A04:2025 – Défaillances cryptographiques
Cette vulnérabilité concerne les données insuffisamment protégées ou mal chiffrées, ce qui peut exposer les informations sensibles des utilisateurs ou des systèmes en cas de fuite ou d’attaque.
Exemples:
- Stockage des mots de passe des utilisateurs en clair dans une base de données. Si la base est compromise, un attaquant obtient directement tous les identifiants.
- Transmission des numéros de carte bancaire ou des informations personnelles sans utiliser HTTPS. Un attaquant sur le même réseau (Wi-Fi public) peut intercepter ces données via une attaque de type man-in-the-middle.
- Tokens JWT contenant des informations sensibles (email, rôle, ID utilisateur) et signés avec une clé faible ou non chiffrés
Mesures de prévention:
- Utiliser des algorithmes de chiffrement robustes, comme bcrypt pour le hachage des mots de passe ou AES-256 pour protéger les données sensibles
- Forcer l’usage de TLS/HTTPS pour toutes les communications
- Limiter au strict nécessaire les informations contenues dans les tokens JWT et les signer avec des clés solides
- Adopter une politique de sécurité par défaut : ne collecter et ne conserver que les données indispensables et chiffrer de bout en bout dès que possible

A05:2025 – Injection
Les failles d’injection permettent d’exécuter des commandes malveillantes via les entrées utilisateur.
Exemples:
- Injection SQL, où une requête comme ci-dessous peut donner accès à l’ensemble des utilisateurs si les paramètres ne sont pas correctement protégés
SELECT * FROM users WHERE email = 'admin' OR '1'='1'
- Faille XSS (Cross-Site Scripting): consiste à injecter du code JavaScript malveillant dans une zone de saisie, qui sera ensuite interprété par le navigateur des visiteurs. Par exemple, si un champ de commentaire affiche le texte soumis sans aucun filtrage, un attaquant pourrait y insérer :
<script>alert('XSS attaque !');</script>
Ce script s’exécutera alors dans le navigateur des visiteurs qui consultent la page, ce qui peut permettre de voler des cookies, usurper une session, ou modifier la page affichée.
Mesures de prévention:
- Utiliser des requêtes préparées ou des ORM
(Sequelize, Prisma), - Valider strictement les entrées avec des bibliothèques comme JOI ou des regex, et échapper systématiquement les caractères spéciaux.

A06:2025 – Conception non sécurisée
Cette vulnérabilité résulte de mauvais choix architecturaux ou de conception dès le développement de l’application, exposant les fonctionnalités et données critiques aux utilisateurs malveillants.
Exemples :
- Accès non autorisé à des routes sensibles : par exemple,
/api/admin/deleteUserou/api/commandes/456même sans les droits appropriés - Modifications des données d’autres comptes ou accès à des informations réservées
- Accès à certaines fonctionnalités critiques depuis l’interface utilisateur alors qu’elles devraient rester côté serveur
- Utilisation d’un champ texte pour injecter des données inattendues, provoquer des erreurs ou altérer le comportement de l’application
Mesures de prévention :
- Concevoir la logique métier de manière sécurisée dès les premières phases du projet, avec des tests de sécurité et des audits de code réguliers
- Vérifier systématiquement les autorisations côté serveur pour chaque action sensible
- Appliquer le principe du moindre privilège à tous les rôles et composants
- Implémenter une validation stricte et exhaustive des entrées utilisateur

A07:2025 – Défaillances d’authentification
Les failles dans les systèmes d’authentification peuvent permettre des attaques par force brute ou l’usurpation d’identité.
Exemples:
- Absence de limitation de tentatives : un attaquant peut tester automatiquement des mots de passe jusqu’à trouver la bonne combinaison sur un compte administrateur.
- Stockage insuffisamment sécurisé : mots de passe en clair ou hachés sans sel, permettant à un attaquant d’exploiter une fuite de base de données.
- Gestion de session faible : jetons JWT sans expiration ou réutilisables indéfiniment.
Mesures de prévention:
- Utiliser des jetons JWT avec date d’expiration et renouvellement sécurisé
- Implémenter un hachage des mots de passe robuste des mots de passe (bcrypt, Argon2) avec sel
- Verrouiller temporairement les comptes après plusieurs tentatives échouées
- Encourager l’usage de MFA (authentification à facteurs multiples) pour les comptes sensibles

A08:2025 – Défaillances d’intégrité des logiciels et des données
Cette vulnérabilité survient lorsque l’application exécute du code non vérifié ou non fiable.
Exemples:
- Charger un script JavaScript depuis un CDN sans vérifier son intégrité. Un pirate qui compromet ce CDN pourrait injecter un code malveillant, comme un script qui vole les données des utilisateurs ou détourne les sessions.
- Déployer automatiquement le code dans un pipeline CI/CDsans valider sérieusement les commits. Cela peut permettre à un attaquant ayant compromis un compte d’ajouter une porte dérobée (backdoor) dans l’application, offrant un accès secret et permanent, ou encore d’introduire des bugs critiques qui compromettent la sécurité ou la stabilité.
Mesures de prévention:
- Implémenter la signature de code (Subresource Integrity) pour garantir que les scripts externes n’ont pas été modifiés,
- Intégrer des tests automatisés rigoureux dans le pipeline CI/CD
- Vérifier systématiquement la provenance et la fiabilité de toutes les dépendances

A09:2025 – Défaillances de
journalisation et de surveillance
L’absence de logs ou une mauvaise gestion de ceux-ci revient à fermer les yeux sur ce qui se passe dans une application.
Exemples:
- Sans enregistrer les tentatives de connexion échouées, on ne voit pas qu’un attaquant essaie en boucle de deviner un mot de passe.
- Si les logs ne sont pas stockées de manière sécurisée, un pirate qui a pénétré le système peut les effacer pour cacher toute trace de son intrusion, rendant toute enquête quasiment impossible.
Mesures de prévention:
- Mettre en place des journaux structurés conservés de manière sécurisée
- Configurer des alertes en cas de comportement anormal
- Utiliser des outils comme Datadog pour centraliser et analyser les logs

A10:2025 – Mauvaise gestion des erreurs et conditions exceptionnelles (nouvelle catégorie)
Cette vulnérabilité apparaît quand les erreurs ou conditions inattendues ne sont pas correctement gérées, exposant des informations sensibles ou provoquant des comportements imprévus.
Exemples :
- Messages différents pour « utilisateur inconnu » et « mot de passe incorrect », révélant l’existence de comptes
- API renvoyant des stack traces complètes lors d’une exception
- Entrées inattendues ou nulles provoquant des plantages et exposant des données internes
Mesures de prévention :
- Centraliser la gestion des exceptions
- Limiter les messages d’erreur aux utilisateurs finaux
- Loguer les détails techniques côté serveur uniquement
- Valider toutes les entrées et anticiper les cas particuliers
- Tester la robustesse avec des données inattendues
🛠️Outils pour auditer la sécurité de vos applications
La meilleure façon de protéger les utilisateurs et l’application est de tester régulièrement avec des outils spécialisés capables de détecter les vulnérabilités dès leur apparition.

OWASP Zed Attack Proxy
Cet outil open source de test de pénétration automatisé est incontournable pour tout développeur soucieux de la sécurité :
- Scanner automatique capable de détecter les vulnérabilités XSS, injections SQL, erreurs de configuration et bien plus
- Mode proxy permettant d’intercepter et modifier les requêtes pour tester les réponses de l’application
- Possibilité de lancer des scans ciblés sur certaines parties de l’application ou des scans complets
- Génération de rapports détaillés catégorisant les vulnérabilités par niveau de risque
- Interface graphique intuitive ou utilisation via ligne de commande pour l’intégration dans des pipelines CI/CD

npm audit et Snyk
Ces outils se concentrent sur la sécurité des dépendances du projet :
- npm audit : Intégré directement à npm, analyse vos dépendances pour identifier celles contenant des vulnérabilités connues
- npm audit fix : Permet de mettre à jour automatiquement les dépendances vulnérables vers des versions sécurisées
- Snyk : Solution plus complète offrant une surveillance continue des dépendances et proposant des correctifs spécifiques
- Intégration possible dans les workflows CI/CD pour bloquer les déploiements contenant des vulnérabilités critiques
- Analyses historiques permettant de suivre l’évolution de la dette de sécurité au fil du temps


Ces clients API peuvent servir d’outils de test de sécurité de base :
- Test des routes avec différents types de payloads potentiellement malveillants
- Vérification des mécanismes d’authentification et d’autorisation
- Analyse des réponses pour détecter des fuites d’informations sensibles
- Tests de contournement des validations en modifiant les requêtes
- Création de collections de tests réutilisables pour vérifier régulièrement la sécurité

Référentiels ANSSI
L’Agence Nationale de la Sécurité des Systèmes d’Information (ANSSI) fournit des guides précieux pour les développeurs français :
- Guide de développement web sécurisé adapté au contexte français et aux réglementations nationales
- Recommandations spécifiques pour la conformité RGPD et la protection des données personnelles
- Conseils pour la sécurisation des systèmes d’information critiques
- Méthodologies d’audit et d’évaluation des risques
Ces ressources sont particulièrement pertinentes pour les applications traitant des données sensibles ou destinées à des organismes publics français.

Lighthouse (Chrome DevTools)
Cet outil intégré à Chrome permet d’analyser rapidement les bonnes pratiques de sécurité :
- Vérification de l’utilisation correcte de HTTPS et des redirections
- Analyse de la configuration des Content Security Policy
- Détection des vulnérabilités courantes dans les bibliothèques JavaScript
- Évaluation des en-têtes de sécurité HTTP
- Génération de rapports facilement partageables avec l’équipe
Bien que moins spécialisé que ZAP, Lighthouse offre un premier niveau d’analyse accessible à tous les développeurs sans configuration complexe.
🧩 Conclusion
Les failles de sécurité recensées par l’OWASP Top 10 et les outils d’audit présentés soulignent l’importance de connaître et comprendre les vulnérabilités avant de les prévenir.
Une analyse régulière avec des outils comme Zed Attack Proxy, npm audit, Snyk et Lighthouse ou des référentiels comme l’ANSSI permet de détecter les points faibles et de renforcer la sécurité de vos applications.
➡️ Pour aller plus loin, la suite à venir prochainement : Sécurité Web : Bonnes pratiques et guide de mise en œuvre, où nous verrons comment appliquer concrètement ces principes sur une application JavaScript fullstack (frontend, backend, base de données et déploiement).





