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.

Par Thibaut Pietri
Derniers articles
SEO vs GEO : pourquoi le trafic des moteurs IA ne ressemble pas au trafic Google
29 mai 2026 Le SEO reste indispensable pour générer du trafic depuis Google. Mais avec l’arrivée des moteurs IA comme ChatGPT, Gemini, Perplexity ou Copilot, une nouvelle logique apparaît : le GEO.
Audit GEO : 10 points pour savoir si votre site est prêt pour les moteurs IA
22 mai 2026 Le GEO, ou Generative Engine Optimization, consiste à optimiser un site pour qu’il soit mieux compris, cité et recommandé par les moteurs de recherche IA comme ChatGPT, Gemini, Perplexity ou les nouvelles réponses générées de Google. Mais votre site est-il vraiment prêt ? Voici une checklist en 10 points essentiels pour réaliser un premier audit GEO.
Protéger vos formulaires sans réduire votre taux de conversion : quelles solutions captcha choisir ?
30 avril 2026 Les captchas sont devenus indispensables pour protéger les formulaires d’un site web contre le spam et les robots. Formulaire de contact, inscription, demande de devis… tous peuvent être ciblés. Mais toutes les solutions ne se valent pas.