OWASP Top 10 expliqué avec des exemples pratiques
Vous avez construit une application web et vous vous inquiétez maintenant de la sécurité. L'OWASP Top 10 est la liste de référence des risques critiques de sécurité des applications web. Mais lire la liste est une chose ; comprendre comment ces risques se manifestent dans du code réel en est une autre. Cet article parcourt chaque catégorie de l'OWASP Top 10 avec des exemples pratiques et des étapes concrètes pour les atténuer.
1. Contrôle d'accès défaillant
Le contrôle d'accès défaillant se produit lorsque les utilisateurs peuvent agir en dehors des autorisations prévues. Par exemple, un utilisateur peut accéder au compte d'un autre utilisateur en modifiant un paramètre d'URL.
// Vulnérable : Aucune vérification que l'ID utilisateur demandé appartient à l'utilisateur authentifié
app.get('/api/user/:id', (req, res) => {
const user = getUserById(req.params.id);
res.json(user);
});
Atténuation : Appliquez des contrôles d'accès côté serveur. Utilisez un contrôle d'accès basé sur les rôles ou les attributs et refusez par défaut.
2. Défaillances cryptographiques
Les données sensibles comme les mots de passe et les numéros de carte de crédit doivent être chiffrées en transit et au repos. L'utilisation d'algorithmes faibles ou le codage en dur de secrets sont des pièges courants.
# Vulnérable : Utilisation de MD5 pour le hachage de mot de passe
import hashlib
hash = hashlib.md5(password.encode()).hexdigest()
Atténuation : Utilisez des algorithmes de hachage forts et salés comme bcrypt ou Argon2. Utilisez toujours HTTPS (TLS) pour les données en transit.
3. Injection
Les failles d'injection, comme l'injection SQL, se produisent lorsque des données non fiables sont envoyées à un interpréteur dans le cadre d'une commande ou d'une requête.
// Vulnérable : Concaténation de chaînes dans une requête SQL
$sql = "SELECT * FROM users WHERE username = '" . $_GET['username'] . "'";
Atténuation : Utilisez des requêtes paramétrées ou des requêtes préparées. Ne concaténez jamais directement les entrées utilisateur dans les requêtes.
4. Conception non sécurisée
La conception non sécurisée fait référence à une conception de contrôle manquante ou inefficace. Par exemple, un système de récupération de mot de passe qui révèle si un e-mail existe peut aider les attaquants.
Atténuation : Modélisation des menaces lors de la conception, utilisation de modèles de conception sécurisés et mise en œuvre de limitations de débit et d'autres contrôles.
5. Mauvaise configuration de sécurité
Cela inclut le fait de laisser des comptes par défaut activés, d'afficher des traces de pile aux utilisateurs ou de mal configurer les autorisations de stockage cloud.
# Vulnérable : Mode débogage activé en production
DEBUG = True
Atténuation : Durcissez les configurations, supprimez les fonctionnalités inutilisées et automatisez les vérifications de configuration.
6. Composants vulnérables et obsolètes
Utiliser des bibliothèques avec des vulnérabilités connues, c'est comme laisser une porte ouverte. Par exemple, une version obsolète d'une bibliothèque populaire peut avoir une faille d'exécution de code à distance.
Atténuation : Mettez régulièrement à jour les dépendances, utilisez des outils comme OWASP Dependency-Check et surveillez les CVE.
7. Défaillances d'identification et d'authentification
Une authentification faible permet aux attaquants de deviner des mots de passe ou de détourner des sessions.
// Vulnérable : Aucun verrouillage de compte après des tentatives échouées
if (passwordMatches) {
loginUser();
} else {
// affiche juste une erreur, pas de limitation de débit
}
Atténuation : Mettez en œuvre l'authentification multifacteur, appliquez des politiques de mots de passe forts et utilisez une gestion de session sécurisée.
8. Défaillances d'intégrité des logiciels et des données
Cette catégorie inclut l'utilisation de sources non fiables pour les mises à jour logicielles ou la désérialisation de données non fiables.
// Vulnérable : Désérialisation de données non fiables
$data = unserialize($_POST['data']);
Atténuation : Vérifiez les signatures numériques, utilisez des contrôles d'intégrité et évitez de désérialiser des données non fiables.
9. Défaillances de journalisation et de surveillance de la sécurité
Sans une journalisation adéquate, les violations passent inaperçues. Par exemple, ne pas consigner les tentatives de connexion échouées.
Atténuation : Consignez les événements liés à la sécurité, configurez des alertes et disposez d'un plan de réponse aux incidents.
10. Falsification de requête côté serveur (SSRF)
La SSRF se produit lorsqu'un attaquant peut amener le serveur à envoyer des requêtes vers des emplacements non prévus.
// Vulnérable : Récupération d'URL à partir d'une entrée utilisateur sans validation
fetch(req.query.url).then(...)
Atténuation : Validez et assainissez les URL, utilisez des listes blanches et limitez les autorisations du serveur.
Tableau comparatif
| Risque | Exemple | Atténuation |
|---|---|---|
| Contrôle d'accès défaillant | Accès aux données d'autres utilisateurs via manipulation d'URL | Appliquer des contrôles d'accès côté serveur |
| Défaillances cryptographiques | Stockage de mots de passe en texte clair | Utiliser un hachage fort et TLS |
| Injection | Injection SQL via une entrée non assainie | Requêtes paramétrées |
| Conception non sécurisée | La récupération de mot de passe révèle l'existence de l'e-mail | Modélisation des menaces et modèles sécurisés |
| Mauvaise configuration de sécurité | Mode débogage activé en production | Durcir les configurations |
| Composants vulnérables | Bibliothèque obsolète avec CVE connue | Mises à jour régulières et vérifications des dépendances |
| Défaillances d'authentification | Pas de limitation de débit sur la connexion | MFA et politiques fortes |
| Défaillances d'intégrité | Désérialisation de données non fiables | Vérifier les signatures et éviter la désérialisation non sécurisée |
| Défaillances de journalisation | Aucun journal pour les connexions échouées | Mettre en œuvre la journalisation et la surveillance |
| SSRF | Récupération d'une URL fournie par l'utilisateur | Valider et mettre sur liste blanche les URL |
FAQ
Qu'est-ce que l'OWASP Top 10 ?
L'OWASP Top 10 est une liste régulièrement mise à jour des risques de sécurité les plus critiques des applications web, publiée par l'Open Web Application Security Project (OWASP).
À quelle fréquence l'OWASP Top 10 est-il mis à jour ?
Il est mis à jour périodiquement pour refléter les menaces émergentes et les changements technologiques. La dernière mise à jour majeure date de 2021.
L'OWASP Top 10 suffit-il pour la sécurité ?
Non, c'est un point de départ. Un programme de sécurité complet comprend des pratiques de codage sécurisé, des tests réguliers et une surveillance continue.
Pour sécuriser davantage vos applications, envisagez d'utiliser des outils comme l'Analyseur de journaux Nginx pour surveiller et détecter les activités suspectes dans les journaux de votre serveur.