Chaque jour, des milliers de sites web d'entreprises sont compromis. Le plus souvent, non pas par des hackers sophistiqués, mais à cause d'erreurs basiques et évitables. En tant que développeur spécialisé en sécurité, j'ai audité des dizaines d'applications et je retrouve toujours les mêmes failles. Voici les 5 plus dangereuses — et comment les corriger.

Statistique alarmante : 43% des cyberattaques ciblent les petites et moyennes entreprises. Le coût moyen d'une violation de données pour une PME est de 120 000 €.

Erreur #1
🔴 Critique
Injection SQL — La faille n°1 selon l'OWASP

L'injection SQL permet à un attaquant d'injecter du code SQL malveillant dans un formulaire ou une URL pour accéder, modifier ou supprimer des données de votre base de données. C'est la vulnérabilité la plus répandue et la plus dévastatrice.

Exemple d'attaque

❌ Code vulnérable (PHP)
$query = "SELECT * FROM users WHERE email = '" . $_POST['email'] . "'";

Un attaquant saisit admin'-- dans le champ email et contourne l'authentification.

✅ Code sécurisé (requêtes préparées PDO)
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$_POST['email']]);
Solution

Toujours utiliser des requêtes préparées (Prepared Statements) avec PDO ou MySQLi. Ne jamais concaténer directement les données utilisateur dans une requête SQL.

Erreur #2
🔴 Critique
Authentification faible et mots de passe mal stockés

Stocker les mots de passe en clair dans la base de données est une erreur catastrophique. En cas de fuite, tous vos utilisateurs sont immédiatement compromis. De même, des règles de mot de passe laxistes facilitent les attaques par brute-force.

❌ Stockage en clair ou MD5 (dépassé)
// JAMAIS faire ça :
INSERT INTO users SET password = 'motdepasse123';
// Ou MD5 qui est crackable en secondes :
$hash = md5($password);
✅ Hachage sécurisé avec bcrypt (PHP)
// Création
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);

// Vérification
if (password_verify($inputPassword, $hash)) {
    // Authentification réussie
}
Solution

Utiliser bcrypt ou Argon2 pour hacher les mots de passe. Implémenter une politique de mot de passe fort (12 caractères min, majuscules, chiffres, symboles) et proposer l'authentification à deux facteurs (2FA).

Erreur #3
🟡 Élevé
Certificat SSL absent ou expiré

Un site sans HTTPS expose les données de vos utilisateurs en transit. Mots de passe, informations personnelles, données de carte bancaire — tout circule en clair et peut être intercepté (attaque "Man in the Middle").

En plus du risque sécuritaire, Google pénalise les sites HTTP dans son classement et Chrome affiche un avertissement "Non sécurisé" repoussant immédiatement vos visiteurs.

Solution

Installer un certificat SSL (gratuit avec Let's Encrypt). Configurer une redirection automatique HTTP → HTTPS. Vérifier la date d'expiration régulièrement et activer le renouvellement automatique. Utiliser HSTS pour forcer HTTPS.

Erreur #4
🔴 Critique
Dépendances et frameworks non mis à jour

WordPress, jQuery, PHP, Node.js… Utiliser des versions obsolètes de vos bibliothèques expose votre site à des vulnérabilités connues et documentées, exploitables par n'importe qui avec une recherche Google.

Exemple réel : En 2017, la faille Equifax a exposé les données de 147 millions de personnes à cause d'un framework (Apache Struts) non mis à jour pendant 2 mois après la publication d'un patch de sécurité.

Solution

Mettre en place une veille sécurité automatisée (Dependabot sur GitHub, npm audit, Composer audit). Appliquer les mises à jour de sécurité dans les 48h suivant leur publication. Utiliser uniquement des dépendances activamente maintenues.

Erreur #5
🔴 Critique
Mauvaise gestion des sessions et XSS

Le Cross-Site Scripting (XSS) permet à un attaquant d'injecter du JavaScript malveillant dans vos pages. Si les cookies de session ne sont pas correctement sécurisés, l'attaquant peut voler la session d'un utilisateur connecté (session hijacking).

❌ Cookie vulnérable
setcookie('session_id', $session_id);
// Cookie accessible en JavaScript, transmis en HTTP
✅ Cookie sécurisé
setcookie('session_id', $session_id, [
    'expires'  => time() + 3600,
    'secure'   => true,   // HTTPS uniquement
    'httponly' => true,   // Inaccessible en JS
    'samesite' => 'Strict' // Protection CSRF
]);
Solution

Configurer les cookies avec les flags HttpOnly, Secure et SameSite. Échapper toutes les sorties HTML (htmlspecialchars()). Implémenter une Content Security Policy (CSP) stricte. Régénérer l'ID de session après connexion.

Tableau récapitulatif OWASP Top 10

VulnérabilitéRisqueProtection principale
Injection SQLCritiqueRequêtes préparées
Authentification faibleCritiquebcrypt + 2FA
Exposition de données sensiblesCritiqueHTTPS + chiffrement
XSSÉlevéÉchappement + CSP
Dépendances vulnérablesÉlevéMises à jour régulières
CSRFÉlevéTokens CSRF + SameSite

Votre site est-il vraiment sécurisé ?

Je réalise des audits de sécurité complets pour identifier et corriger les failles de votre application web.

Demander un audit sécurité →
🛡️
Imad Chamkhi
Développeur Web & Sécurité · Strasbourg
Master Expert IT & BDD, avec une spécialisation en sécurité des applications web. J'ai développé AllSafe, une application intégrant MFA, gestion des rôles et architecture MVC sécurisée.