Aller au contenu

Blog

Sécuriser les API dans les projets Node.js et MySQL : meilleures pratiques et exemples de code

Meilleures pratiques pour la sécurité API dans Node.js et MySQL

  • 3 min de lecture
  • Updated

Sécurisation des API dans les projets Node.js et MySQL

API Couches de sécuritéClientNavigateur/ApplicationTLSHTTPS1.3🔒TauxLimiteurDDoSProtection🛡️AuthJWTVérifierRBAC🔑EntréeValidationDésinfectionJoi/Zod✅SQLParamPréparéDéclarations🗃️MySQLBase de donnéesDéfense en profondeur : chaque couche empêche une classe d'attaquesAucune couche n'est suffisante : la sécurité nécessite que toutes les couches travaillent ensembleCouche 1Couche 2Couche 3Couche 4Couche 5Chiffretout le traficBloque brutalementattaques de forceVérifie l'identité deEmpêcheXSS/injectionEmpêcheSQL injection
API Security Diagram

Les API constituent l'épine dorsale des applications Web et mobiles modernes. Lors de la construction de API avec Node.js et MySQL, la sécurité doit être une priorité absolue. Ce guide couvre les meilleures pratiques essentielles et des exemples de code pour vous aider à sécuriser vos API.

API Architecture de sécurité

API Security Architecture

Ce diagramme montre une approche en couches de la sécurité API, comprenant la passerelle, le WAF, l'authentification et la protection de la base de données.

Passerelle

API et WAF

API Gateway and WAF

Utilisez une passerelle API et un pare-feu d'application Web (WAF) pour centraliser la sécurité, la limitation du débit et la validation des demandes. Cela permet de bloquer le trafic malveillant avant qu'il n'atteigne votre application Node.js.

Utilisateur vers DB Flow

User to DB Flow

Ce diagramme montre le flux sécurisé de l'utilisateur à la base de données, avec des contrôles d'authentification et d'autorisation à chaque étape.

1. Utilisez HTTPS partout

Servez toujours votre API sur HTTPS pour crypter les données en transit. Utilisezletsencryptou un certificat SSL commercial.

2. Authentification et autorisation

  • JWT (jetons Web JSON) :Utilisez JWT pour l'authentification sans état. Émettez des jetons lors de la connexion et vérifiez-les à chaque demande.
  • Contrôle d'accès basé sur les rôles (RBAC) :Restreindre l'accès aux points finaux sensibles en fonction des rôles des utilisateurs.
// Example: JWT middleware
const jwt = require('jsonwebtoken');
function authenticateToken(req, res, next) {
  const token = req.headers['authorization']?.split(' ')[1];
  if (!token) return res.sendStatus(401);
  jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
    if (err) return res.sendStatus(403);
    req.user = user;
    next();
  });
}

3. Prévenir l’injection de SQL

OWASP Principales menaces et vulnérabilités DéfensesSQL InjectionRequêtes malveillantesRequêtes paramétréesRequêtes préparées et amp; ORMAuthentification casséeInformations d'identification faiblesJWT + MFA + bcryptRotation et amp; hachageXSSInjection de scriptDésinfection des entréesEn-têtes et amp; échappementSSRFAccès interneListe d'autorisation d'URLSegmentation du réseauMauvaise configurationParamètres par défautRenforcement de la sécuritéHelmet.js & auditChaque menace a une défense : implémentez toutes les couches pour une protection complèteBasé sur les 10 principaux risques de sécurité des applications Web de l'OWASP

Utilisez toujours des requêtes paramétrées ou des bibliothèques ORM (comme Sequelize ou Knex) pour empêcher l'injection de SQL.

// Using mysql2 with placeholders
const [rows] = await db.execute('SELECT * FROM users WHERE id = ?', [userId]);

4. Validation et nettoyage des entrées

Validez et désinfectez toutes les données entrantes à l'aide de bibliothèques telles queexpress-validatoroujoi.

5. Sécuriser les données sensibles

  • Ne stockez jamais de mots de passe en texte brut. Hachez toujours avecbcrypt.
  • Stockez les secrets (identifiants de base de données, secrets JWT) dans des variables d'environnement, pas dans le code.

6. Limitation de débit et limitation

Protégez votre API contre les attaques par force brute et DDoS à l'aide d'un middleware limitant le débit commeexpress-rate-limit.

7. Journalisation et surveillance

Enregistrez toutes les tentatives et erreurs d’authentification. Utilisez des outils de surveillance pour détecter les activités suspectes.

8. Garder les dépendances à jour

Mettez régulièrement à jour Node.js, MySQL et toutes les dépendances pour corriger les vulnérabilités connues.

Lectures complémentaires

Related reading. For an explainable edge Web Application Firewall on TenthMatrix WSL Proxy, see the WAF blog, the technical article, or wslproxy.org.