Passer au contenu
Les 10 attaques web les plus courantes et comment s’en protéger

Les 10 attaques web les plus courantes et comment s’en protéger

25 décembre 2025 attaque  vulnérabilité 

Un site web exposé sur Internet est en permanence scanné par des robots à la recherche de failles. La bonne nouvelle, c’est que la plupart des attaques sont connues, prévisibles, et donc évitables si l’on applique des règles simples côté serveur, PHP et base de données.

Voici les 10 attaques web les plus courantes et surtout comment s’en protéger, avec des exemples et des bonnes pratiques.

1 Injection SQL (SQLi)

L’attaquant injecte du SQL dans un champ (formulaire, URL) pour lire, modifier ou supprimer des données (comptes, commandes, emails…).

  • Utiliser des requêtes préparées (PDO / MySQLi) et ne jamais concaténer l’input dans le SQL
  • Valider/caster les types (int, enum, listes blanches)
  • Donner au compte MySQL le minimum de droits (pas de GRANT/FILE/…)
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);

2 Cross-Site Scripting (XSS)

Du JavaScript malveillant est injecté dans une page (via commentaire, profil, paramètre d’URL) pour voler des cookies ou exécuter des actions à la place de l’utilisateur.

  • Échapper toutes les sorties HTML (escape output)
  • Nettoyer/filtrer les entrées (HTML autorisé via liste blanche)
  • Ajouter une Content-Security-Policy (CSP) si possible
echo htmlspecialchars($comment, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');

3 CSRF (Cross-Site Request Forgery)

Une page externe force un utilisateur connecté à envoyer une requête (changer email, mot de passe, virement…) sans s’en rendre compte.

  • Ajouter un token CSRF unique dans les formulaires
  • Vérifier le token côté serveur avant toute action sensible
  • Utiliser des cookies de session SameSite (Lax/Strict)
// Génération
$_SESSION['csrf'] = bin2hex(random_bytes(32));

// Vérification
if (!hash_equals($_SESSION['csrf'], $_POST['csrf'] ?? '')) exit('CSRF');

4 Brute force / credential stuffing

Des bots testent des milliers de mots de passe ou des identifiants volés (email+mdp) pour prendre le contrôle des comptes.

  • Limiter le nombre d’essais (rate limiting) + temporisation
  • Ajouter un captcha après X tentatives
  • Activer la double authentification (2FA) pour les comptes à privilèges

5 Upload de fichiers malveillants

L’attaquant envoie un fichier (image, PDF, “.php” déguisé) pour exécuter du code ou déposer une backdoor.

  • Vérifier extension + MIME + contenu (pas seulement le nom)
  • Renommer les fichiers et les stocker hors webroot si possible
  • Désactiver l’exécution PHP dans le dossier d’upload
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($_FILES['file']['tmp_name']);
$allowed = ['image/jpeg','image/png','application/pdf'];
if (!in_array($mime, $allowed, true)) exit('Fichier non autorisé');

6 Inclusion de fichiers (LFI/RFI)

Une variable d’URL est utilisée dans un include/require et permet de charger un fichier local (LFI) ou distant (RFI) pour exécuter du code ou lire des secrets.

  • Ne jamais inclure un fichier à partir d’une donnée utilisateur
  • Utiliser une liste blanche de routes/pages
  • Désactiver allow_url_include (et vérifier la config PHP)
$pages = ['home' => 'home.php', 'contact' => 'contact.php'];
$key = $_GET['p'] ?? 'home';
include $pages[$key] ?? $pages['home'];

7 Session hijacking (vol de session)

L’attaquant récupère ou devine un identifiant de session (via XSS, réseau compromis, cookie mal protégé) et se connecte à la place de l’utilisateur.

  • Cookies de session en HttpOnly + Secure + SameSite
  • Regénérer l’ID de session après login
  • Forcer HTTPS partout
session_set_cookie_params([
  'secure' => true,
  'httponly' => true,
  'samesite' => 'Lax'
]);
session_regenerate_id(true);

8 Mauvaise configuration serveur (exposition)

Indexation de répertoires, fichiers sensibles accessibles, version PHP affichée, erreurs trop bavardes… souvent, l’attaque commence par une fuite d’info.

  • Désactiver le listing de dossier, protéger .env, backup.zip, phpinfo()
  • Configurer des pages d’erreur propres (ne pas afficher de stack trace en prod)
  • Mettre à jour Apache/PHP et limiter les modules

9 Exploitation de plugins / dépendances vulnérables

Sur WordPress, ou sur un projet PHP, une dépendance non mise à jour suffit parfois à compromettre tout le site.

  • Mettre à jour CMS, plugins, thèmes et bibliothèques
  • Supprimer ce qui n’est pas utilisé
  • Sur PHP, surveiller les vulnérabilités (Composer + advisories)

10 DDoS / abus de ressources

Le serveur est saturé par un volume de requêtes (DDoS) ou par des actions coûteuses (recherche non optimisée, endpoints non limités).

  • Mettre en place du rate limiting (par IP / endpoint)
  • Utiliser un CDN / WAF si nécessaire
  • Optimiser les endpoints lourds (cache, index DB, pagination)

Checklist rapide

  • Tout passer en HTTPS + cookies Secure/HttpOnly/SameSite
  • Requêtes SQL préparées partout (aucune concaténation)
  • Escape systématique en sortie HTML (anti-XSS)
  • Token CSRF sur formulaires sensibles
  • Rate limiting sur login + endpoints exposés
  • Uploads vérifiés + stockage hors webroot
  • Mises à jour CMS/plugins/dépendances régulières
  • Logs activés + monitoring des erreurs

Conclusion : la plupart des attaques “qui marchent” exploitent des erreurs classiques : entrées non filtrées, sorties non échappées, composants non mis à jour, ou serveur mal configuré. En appliquant ces mesures, vous pourrez déjà bloquer une grosse partie des risques.

Note : 5 - 1 vote Evaluer cet article
5

Par Thibaut Pietri

Ingénieur informatique spécialisé réseau, basé à Toulouse, j'ai plus de 25 ans d'expérience en développement et sécurisation de sites Internet, Extranet & applications mobiles autour des technologies LAMP (Linux/Apache/MySQL/PHP) sur différents outils de gestion de contenu (Wordpress, Prestashop, Drupal, Isens Evolution...).

Derniers articles

Aucun commentaire, soyez le premier !

 
Retour en haut de la page