📘 Cours complet⏱️ 4h🎯 Bloc 3 – B3.4 / B3.5 A Objectifs : identifier les vulnérabilités OWASP Top 10, mettre en œuvre des contre-mesures, sécuriser le développement et les environnements.
📖 Introduction
Les applications web sont la porte d'entrée privilégiée des attaquants. Les failles de sécurité Web sont responsables de la majorité des brèches de sécurité. Ce module vous présente les vulnérabilités les plus courantes (OWASP Top 10) et les bonnes pratiques pour les prévenir.
🎯
À l'issue de ce module, vous serez capable de :
Identifier les vulnérabilités OWASP Top 10.
Mettre en œuvre des protections contre les injections SQL et les XSS.
Sécuriser les sessions et l'authentification.
Configurer un WAF (Web Application Firewall).
Effectuer des tests de sécurité simples.
🛡️ OWASP Top 10 (2021)
Les 10 vulnérabilités web les plus critiques selon l'Open Web Application Security Project.
#
Vulnérabilité
Description
1
Broken Access Control
Contrôle d'accès défaillant (ex : accès à des données d'autres utilisateurs).
2
Cryptographic Failures
Défauts de chiffrement (ex : données en clair, algorithmes faibles).
3
Injection
Injection SQL, XSS, OS Command Injection, etc.
4
Insecure Design
Conception non sécurisée (ex : absence de privacy by design).
5
Security Misconfiguration
Configuration par défaut non sécurisée (ex : serveur exposé).
6
Vulnerable and Outdated Components
Composants obsolètes ou vulnérables (ex : jQuery ancien).
7
Identification and Authentication Failures
Authentification défaillante (ex : mots de passe faibles).
8
Software and Data Integrity Failures
Intégrité logicielle (ex : dépendances non vérifiées).
9
Security Logging and Monitoring Failures
Absence de logs et de supervision.
10
Server-Side Request Forgery
Requêtes frauduleuses côté serveur (SSRF).
🔍 Vulnérabilités courantes
3.1 – Injection SQL
Principe : insertion de code SQL dans une requête.
Exemple : ' OR '1'='1 dans un champ de formulaire.
Principe : exécution d'actions non autorisées sur une application où l'utilisateur est authentifié.
Exemple : une requête POST effectuée depuis un site externe.
Contre-mesures : jetons CSRF, vérification du référent, SameSite cookies.
3.4 – Broken Authentication
Problèmes : mots de passe faibles, absence de MFA, sessions non protégées.
Contre-mesures : politique de mots de passe robuste, MFA, expiration des sessions, chiffrement des cookies.
💡
Bonnes pratiques : Appliquer le principe de "moindre privilège" aux bases de données, utiliser des requêtes paramétrées, valider et échapper toutes les entrées utilisateur.
🛠️ Sécurisation du développement
Analyse des risques : réaliser des modèles de menaces dès la conception.
Développement sécurisé : utiliser des frameworks modernes (ex : Symfony, Spring) qui intègrent des protections (CSRF, XSS).
Audit de code : revue de code par les pairs, outils d'analyse statique (SonarQube).
Tests de sécurité : tests d'intrusion, scans de vulnérabilités (OWASP ZAP, Burp Suite).
Environnements : isolation des environnements (développement, test, production).
🛠️ Mise en pratique
5.1 – Simuler une injection SQL avec DVWA
DVWA (Damn Vulnerable Web Application) est une application vulnérable pour s'entraîner.
Installer DVWA dans un conteneur Docker ou localement.
Se connecter avec les identifiants par défaut (admin/password).
Aller dans la section "SQL Injection".
Saisir ' OR '1'='1 dans le champ User ID.
Observer les résultats : affichage de tous les utilisateurs.
Résultat : la requête devient SELECT * FROM users WHERE id = '' OR '1'='1', qui renvoie tous les enregistrements.
Contre-mesure : utiliser des requêtes paramétrées (mysqli_prepare ou PDO).
5.2 – Protéger contre les XSS avec PHP
Échapper les caractères spéciaux :
<?php
$nom = $_GET['nom'] ?? '';
// Échapper les caractères pour éviter le XSS
$nom_securise = htmlspecialchars($nom, ENT_QUOTES, 'UTF-8');
echo "Bonjour " . $nom_securise;
?>
htmlspecialchars convertit les caractères spéciaux en entités HTML (< → <).
ENT_QUOTES encode également les guillemets simples et doubles.
Empêche l'exécution de code JavaScript injecté.
5.3 – Configurer un WAF (ModSecurity)
ModSecurity est un WAF open-source pour Apache/Nginx.
Installer ModSecurity avec le package libapache2-mod-security2.
Activer les règles OWASP Core Rule Set (CRS).
Configurer le mode "DetectionOnly" pour tester avant de bloquer.
Analyser les logs pour identifier les attaques.
ModSecurity analyse les requêtes HTTP et les compare à des règles de signature.
Le CRS couvre les OWASP Top 10 (injection SQL, XSS, etc.).
En production, passer en mode "Enforcement" pour bloquer les attaques.
📝 Exercices d'application
Exercice 1 – Vocabulaire OWASP
Associez chaque vulnérabilité à sa définition :
Injection SQL : …
XSS : …
CSRF : …
Broken Authentication : …
Injection SQL : Insertion de code SQL dans une requête.
XSS : Injection de code JavaScript dans une page web.
CSRF : Exécution d'actions non autorisées sur une application authentifiée.
Broken Authentication : Défauts dans le système d'authentification.
Exercice 2 – Mise en situation
Vous développez un site e-commerce. Dressez la liste des mesures de sécurité à mettre en œuvre pour protéger l'application et les données clients.
HTTPS : Utiliser TLS pour chiffrer toutes les communications.
Authentification : MFA, politique de mots de passe robuste.
Injections : Requêtes paramétrées, validation des entrées.
XSS : Échappement des sorties, CSP.
CSRF : Jetons CSRF, SameSite cookies.
Sessions : Expiration, sécurisation des cookies (HttpOnly, Secure).
Données sensibles : Chiffrement au repos, pseudonymisation.
Logs : Journalisation des accès, monitoring des erreurs.
WAF : Protection en ligne avec ModSecurity.
Mises à jour : Maintenir tous les composants à jour.
🎯 Quiz d'auto‑évaluation
Testez vos connaissances. Sélectionnez une réponse, un feedback s'affichera immédiatement.
1. L'injection SQL consiste à :
2. Pour éviter les XSS, il faut :
3. Un WAF (Web Application Firewall) a pour rôle de :