← Retour au portail

🔒 Module CYB7 – Sécurité des applications web

📘 Fiche de cours ⏱️ 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
1Broken Access ControlContrôle d'accès défaillant (ex : accès à des données d'autres utilisateurs).
2Cryptographic FailuresDéfauts de chiffrement (ex : données en clair, algorithmes faibles).
3InjectionInjection SQL, XSS, OS Command Injection, etc.
4Insecure DesignConception non sécurisée (ex : absence de privacy by design).
5Security MisconfigurationConfiguration par défaut non sécurisée (ex : serveur exposé).
6Vulnerable and Outdated ComponentsComposants obsolètes ou vulnérables (ex : jQuery ancien).
7Identification and Authentication FailuresAuthentification défaillante (ex : mots de passe faibles).
8Software and Data Integrity FailuresIntégrité logicielle (ex : dépendances non vérifiées).
9Security Logging and Monitoring FailuresAbsence de logs et de supervision.
10Server-Side Request ForgeryRequê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.
  • Contre-mesures : requêtes paramétrées (PDO, Prepared Statements), validation stricte des entrées, ORM.

3.2 – Cross-Site Scripting (XSS)

  • Principe : injection de code JavaScript dans une page web.
  • Types : réfléchi (non persistant), stocké (persistant), DOM-based.
  • Contre-mesures : échappement des caractères spéciaux (htmlspecialchars), Content Security Policy (CSP).

3.3 – Cross-Site Request Forgery (CSRF)

  • 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 (<&lt;).
  • 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 :

4. Une attaque CSRF permet à un attaquant de :

5. La fonction PHP htmlspecialchars permet de :

📚 Ressources et liens utiles