Sécurisation des API dans les projets Node.js et MySQL
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é
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.
PasserelleAPI et 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
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
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 avec
bcrypt. - 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.