Sécurité

Sécurité web : les 5 erreurs à éviter absolument

Les failles de sécurité les plus courantes dans les projets web et comment les éviter. Des conseils pratiques pour sécuriser votre application sans être expert en cybersécurité.

Pourquoi la sécurité dès le départ ?

La sécurité, c'est comme l'accessibilité : c'est beaucoup plus facile de l'intégrer dès le départ que de corriger après. Et contrairement à ce qu'on pense souvent, sécuriser une application ne nécessite pas d'être expert en cybersécurité. Il suffit d'éviter les erreurs les plus courantes. On vous montre lesquelles, et comment les éviter.

Ces 5 erreurs représentent la majorité des failles de sécurité qu'on rencontre dans les projets web. Les éviter, c'est déjà sécuriser 80% de votre application. Et franchement, c'est déjà beaucoup ! On a toutes fait ces erreurs au début, alors on vous partage ce qu'on a appris.

Erreur #1 : Injection SQL (SQL Injection)

Le problème : Si vous construisez vos requêtes SQL en concaténant directement les données utilisateur, vous êtes vulnérable aux injections SQL. Un attaquant peut exécuter du code SQL malveillant.

Exemple de code vulnérable :

// ❌ DANGEREUX
const query = `SELECT * FROM users WHERE email = '${email}'`;

La solution : Utilisez toujours des requêtes paramétrées ou un ORM.

// ✅ SÉCURISÉ
const query = 'SELECT * FROM users WHERE email = ?';
db.query(query, [email]);

Frameworks modernes : La plupar t des frameworks (Express avec Sequelize/Prisma, Django ORM, Laravel Eloquent) gèrent ça automatiquement. Utilisez-les plutôt que d'écrire du SQL brut.

Erreur #2 : XSS (Cross-Site Scripting)

Le problème : Si vous affichez directement du contenu utilisateur sans l'échapper, un attaquant peut injecter du JavaScript malveillant qui s'exécutera dans le navigateur des autres utilisateurs.

Exemple de code vulnérable :

// ❌ DANGEREUX
<div>{userComment}</div>

La solution : Échappez toujours le contenu utilisateur avant de l'afficher.

// ✅ SÉCURISÉ (React échappe automatiquement)
<div>{userComment}</div>

// ✅ SÉCURISÉ (Vanilla JS)
const div = document.createElement('div');
div.textContent = userComment;

Frameworks modernes : React, Vue, Angular échappent automatiquement le contenu. Mais attention si vous utilisez dangerouslySetInnerHTML (React) ou v-html (Vue) : dans ce cas, vous devez sanitizer le contenu avec une bibliothèque comme DOMPurify.

Erreur #3 : Authentification faible

Le problème : Mots de passe en clair dans la base de données, pas de limitation de tentatives de connexion, tokens JWT non sécurisés, etc.

Les solutions :

  • Hash les mots de passe : Utilisez bcrypt, argon2, ou scrypt. Jamais de hash MD5 ou SHA1 (trop rapides à cracker).
  • Limitez les tentatives de connexion : Rate limiting (max 5 tentatives par IP, puis blocage temporaire).
  • Sécurisez les tokens JWT : Utilisez des tokens avec expiration courte, stockez-les en httpOnly cookies (pas en localStorage).
  • Activez HTTPS : Toujours, partout. Les mots de passe en HTTP sont interceptables.

Erreur #4 : CORS mal configuré

Le problème : Si vous autorisez toutes les origines (Access-Control-Allow-Origin: *), n'importe quel site peut faire des requêtes vers votre API.

La solution : Autorisez uniquement les origines que vous contrôlez.

// ✅ SÉCURISÉ
Access-Control-Allow-Origin: https://votresite.com

// Ou en Express
app.use(cors({
  origin: ['https://votresite.com', 'https://www.votresite.com']
}));

En développement : Vous pouvez autoriser localhost, mais jamais en production.

Erreur #5 : Secrets exposés

Le problème : Clés API, mots de passe, tokens hardcodés dans le code ou commités dans Git.

Les solutions :

  • Utilisez des variables d'environnement : .env pour le développement local, variables d'environnement du serveur pour la production.
  • Ne commitez jamais les secrets : Ajoutez .env à votre .gitignore.
  • Utilisez un gestionnaire de secrets : AWS Secrets Manager, HashiCorp Vault, ou même les variables d'environnement de votre plateforme (Railway, Render, etc.).
  • Rotez les secrets régulièrement : Changez vos clés API tous les 3-6 mois.

Bonnes pratiques supplémentaires

Mises à jour de sécurité

Gardez vos dépendances à jour. Utilisez npm audit ou yarn audit pour identifier les vulnérabilités connues.

Headers de sécurité

Ajoutez des headers de sécurité HTTP :

  • Content-Security-Policy : Limite les ressources que le navigateur peut charger
  • X-Frame-Options : Empêche le clickjacking
  • X-Content-Type-Options: nosniff : Empêche le MIME-sniffing
  • Strict-Transport-Security : Force HTTPS

Validation des données

Validez toujours les données côté serveur, même si vous validez côté client. Le client peut être modifié.

En résumé

Ces 5 erreurs représentent la majorité des failles de sécurité. Les éviter, c'est déjà sécuriser votre application de manière significative. Pour aller plus loin :

  • Utilisez des frameworks modernes qui gèrent la sécurité par défaut
  • Tenez-vous informé des vulnérabilités (CVE, newsletters de sécurité)
  • Faites auditer votre application régulièrement (au moins une fois par an)
  • Formez votre équipe aux bonnes pratiques de sécurité

La sécurité, c'est un processus continu, pas un état. Commencez par éviter ces 5 erreurs, puis améliorez progressivement.

Besoin d'aide pour sécuriser votre application ?

Nous pouvons vous accompagner dans l'audit de sécurité et la mise en place des bonnes pratiques.

Discutons de votre projet