Sécurité Web

OWASP Top 10

Les 10 vulnérabilités web les plus critiques selon l'OWASP et comment s'en protéger

owaspwebxssinjectionsécurité-web

A01 — Broken Access Control

Accès à des ressources non autorisées.

Exemples :

  • Modification d'URL : /api/users/123/api/users/456
  • Accès admin sans vérification de rôle
  • IDOR (Insecure Direct Object Reference)

Protection :

  • Vérifier les permissions côté serveur à chaque requête
  • Utiliser des tokens opaques au lieu d'IDs séquentiels
  • Deny by default — tout est interdit sauf autorisation explicite

A02 — Cryptographic Failures

Données sensibles exposées par manque de chiffrement.

Exemples :

  • Mots de passe en clair dans la base de données
  • HTTP au lieu de HTTPS
  • Algorithmes obsolètes (MD5, SHA1, DES)

Protection :

  • TLS 1.3 pour tout le trafic
  • Bcrypt ou Argon2 pour les mots de passe
  • AES-256-GCM pour le chiffrement au repos
  • Ne jamais stocker de secrets en dur dans le code

A03 — Injection

Données non validées interprétées comme du code.

SQL Injection

-- Vulnerable
SELECT * FROM users WHERE email = 'input';
 
-- Attaque
' OR '1'='1' --
 
-- Protection : requêtes paramétrées
SELECT * FROM users WHERE email = $1;

Command Injection

# Vulnerable
os.system("ping " + user_input)
 
# Attaque
; rm -rf /
 
# Protection : ne jamais construire de commandes avec des inputs

Protection :

  • Requêtes paramétrées (prepared statements)
  • ORM pour les requêtes SQL
  • Validation et sanitisation des entrées
  • Principe du moindre privilège pour les comptes DB

A04 — Insecure Design

Failles architecturales, pas juste des bugs d'implémentation.

Protection :

  • Threat modeling dès la conception
  • Security requirements dans les user stories
  • Revue de design sécurité avant l'implémentation

A05 — Security Misconfiguration

Mauvaise configuration des serveurs, frameworks ou cloud.

Exemples :

  • Ports ouverts inutilement
  • Headers de sécurité manquants
  • Pages d'erreur qui exposent des stack traces
  • Comptes par défaut non désactivés

Headers de sécurité essentiels :

Content-Security-Policy: default-src 'self'
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Strict-Transport-Security: max-age=31536000; includeSubDomains
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()

A06 — Vulnerable Components

Dépendances avec des vulnérabilités connues.

Protection :

$npm audit
Vérifier les vulnérabilités dans les dépendances Node.js
$trivy image mon-app:latest
Scanner une image Docker
  • Dependabot ou Renovate pour les mises à jour automatiques
  • Software Composition Analysis (SCA) dans le pipeline CI

A07 — Authentication Failures

Failles dans l'authentification et la gestion de session.

Protection :

  • MFA obligatoire
  • Rate limiting sur les endpoints de login
  • Tokens JWT avec expiration courte
  • Sessions invalidées à la déconnexion
  • Politique de mots de passe robuste (longueur > complexité)

A08 — Software and Data Integrity Failures

Code ou données modifiés sans vérification.

Protection :

  • Vérification d'intégrité des packages (checksums, signatures)
  • CI/CD sécurisé avec revue de code obligatoire
  • Subresource Integrity (SRI) pour les CDN

A09 — Security Logging and Monitoring Failures

Absence de logs ou monitoring insuffisant.

A logger :

  • Tentatives de connexion (succès et échecs)
  • Changements de permissions
  • Accès à des données sensibles
  • Erreurs d'autorisation

Ne PAS logger :

  • Mots de passe
  • Tokens d'authentification
  • Données personnelles sensibles

A10 — Server-Side Request Forgery (SSRF)

Le serveur effectue des requêtes vers des URLs contrôlées par l'attaquant.

Protection :

  • Valider et filtrer les URLs côté serveur
  • Bloquer les requetes vers les réseaux internes (169.254.x.x, 10.x.x.x)
  • Utiliser une allowlist d'URLs autorisées