Règle
Supprimer débogage et temporaire temporaire avant les les commits.
Le code qui contourne logique, produit débogage de débogage,
ou arrête l'exécution pour débogage était probablement
laissée derrière accidentellement au cours du développement.
Langues prises en charge : 45+Introduction
Code de débogage, console.log() les déclarations, la logique commentée, les valeurs de test codées en dur, ou les débogueur Les artefacts, tels que les points d'arrêt, sont expédiés en production plus souvent que ne l'admettent la plupart des équipes. Ces artefacts exposent l'état interne de l'application, créent des surcharges de performance et signalent aux attaquants les parties de votre base de code qui ont posé problème pendant le développement. Ce qui n'est au départ qu'un code temporaire de dépannage devient un risque permanent pour la sécurité s'il n'est pas supprimé avant le déploiement.
Pourquoi c'est important
Implications en matière de sécurité : Le code de débogage dans la production enregistre souvent des données sensibles telles que les identifiants des utilisateurs, les clés API ou les informations confidentielles qui ne devraient pas se retrouver dans les journaux de production.
A console.log(user) peut déverser un objet utilisateur entier, y compris les jetons de session, dans la console du navigateur ou dans les journaux du serveur accessibles au personnel d'assistance ou aux outils d'agrégation des journaux. Il s'agit de l'une des vulnérabilités les plus courantes en matière de sécurité du code que les outils d'examen automatisé du code détectent.
Impact sur les performances : La journalisation excessive de la console crée un goulot d'étranglement E/S. Un point d'extrémité à fort trafic enregistrant les charges utiles des requêtes peut dégrader les temps de réponse de 15 à 30 ms par requête et gonfler les coûts de stockage des journaux. L'impact de la journalisation sur les performances des environnements de production Node.js s'aggrave rapidement à grande échelle.
La maintenabilité du code : Des modifications temporaires du code comme si (true) retour ; ou
// TODO: fix later contournent la logique commerciale et créent de la confusion pour les futurs responsables de la maintenance. Elles représentent une dette technique sans trace documentaire.
Extension de la surface d'attaque : Les instructions du débogueur et la journalisation des erreurs révèlent les traces de pile, les chemins d'accès aux fichiers, les versions des dépendances et le flux logique interne, informations utiles pour la reconnaissance lors d'attaques ciblées.
Exemples de code
❌ Non conforme :
async function processPayment(userId, amount) {
console.log('Processing payment:', { userId, amount });
const user = await db.users.findById(userId);
console.log('User data:', user); // Logs email, tokens, everything
debugger;
const result = await paymentGateway.charge({
userId: user.id,
amount: amount
});
console.log('Gateway response:', result);
return result;
}
Pourquoi ce n'est pas sûr : Les instructions de la console enregistrent les informations personnelles identifiables (PII) et les jetons d'authentification dans les journaux de production. Le débogueur commenté crée une ambiguïté sur les chemins d'exécution. Toutes ces données sont accessibles à toute personne ayant accès aux journaux et fournissent aux attaquants des données de reconnaissance.
✅ Conforme :
async function processPayment(userId, amount) {
const user = await db.users.findById(userId);
if (!user) {
throw new PaymentError('User not found');
}
const result = await paymentGateway.charge({
userId: user.id,
amount: amount
});
await auditLog.record({
event: 'PAYMENT_PROCESSED',
userId: userId,
transactionId: result.transactionId
});
return result;
}Pourquoi c'est sûr : L'enregistrement structuré remplace console.log avec des pistes d'audit appropriées qui capturent les événements commerciaux sans exposer les données sensibles des utilisateurs. Il n'existe aucune instruction de débogage. La logique s'écoule de manière linéaire, sans contournement conditionnel. Les journaux d'audit sont centralisés, leur accès est contrôlé et ils ne contiennent que le contexte nécessaire à la conformité et au débogage.
Conclusion
Le code de débogage en production n'est pas un problème mineur, c'est une vulnérabilité de sécurité, une responsabilité de performance et un fardeau de maintenance. Le respect des meilleures pratiques en matière de revue de code sécurisée permet de détecter ces problèmes avant qu'ils n'atteignent la branche principale. Les règles automatisées de qualité du code devraient empêcher le code de débogage d'atteindre le contrôle de version, sans parler de la production. La clé est d'avoir les bons outils pour détecter ces problèmes avant qu'ils ne fusionnent.
.avif)
