01

Web Attacks

OWASP Top 10 : Les classiques indémodables.

📌 En Bref

Le Web est la surface d'attaque la plus exposée. La règle d'or : Ne jamais faire confiance aux données utilisateur (User Input). Toujours valider, filtrer et échapper les données entrantes ET sortantes.

💉 Injection SQL (SQLi)

Impact: Critique

L'attaquant manipule la requête SQL pour accéder à des données non autorisées.

❌ VULNÉRABLE (Concaténation)
// PHP
$user = $_POST['user'];
$query = "SELECT * FROM users 
          WHERE name = '" . $user . "'";

// Attaque: ' OR '1'='1
// Result: SELECT * FROM users ...
✅ SÉCURISÉ (Prepared Statements)
// PHP (PDO)
$stmt = $pdo->prepare(
    "SELECT * FROM users WHERE name = :name"
);
$stmt->execute(['name' => $user]);

// Le driver échappe l'input auto.

🎭 Cross-Site Scripting (XSS)

Impact: Élevé

Injection de JavaScript malveillant qui s'exécute dans le navigateur de la victime.

Reflected XSS

Le script est dans l'URL (Lien piégé).

site.com?search=<script>alert(1)</script>

Stored XSS

Le script est stocké en BDD (Commentaire, Profil).

Bonjour <script>stealCookies()</script>
🛡️ Défense

Échapper les données à l'affichage (Output Encoding).
En React/Vue/Angular, c'est automatique par défaut. En PHP : htmlspecialchars().

🔄 CSRF (Cross-Site Request Forgery)

Forcer l'utilisateur à exécuter une action à son insu (ex: changer son mot de passe).

📬 Analogie

L'attaquant envoie une lettre à votre banque signée de VOTRE main (votre cookie de session valide) demandant un virement. La banque l'exécute car la signature est vraie.

Solution : Anti-CSRF Token. Un jeton secret unique généré à chaque formulaire, que l'attaquant ne peut pas deviner.