Regla
Eliminar depuración y temporal temporal antes de confirmar.
Código que pasa por alto lógica, salidas depuración de depuración,
o detiene la ejecución de ejecución para depuración era probablemente
dejado detrás accidentalmente durante el desarrollo de el desarrollo.
Idiomas admitidos: 45+Introducción
Depuración de código, console.log() lógica no comentada, valores de prueba codificados o depurador a producción más a menudo de lo que la mayoría de los equipos admiten. Estos artefactos exponen el estado interno de la aplicación, crean sobrecarga de rendimiento y señalan a los atacantes qué partes de su código base eran problemáticas durante el desarrollo. Lo que comienza como código temporal para la resolución de problemas se convierte en un riesgo permanente para la seguridad si no se elimina antes de la implantación.
Por qué es importante
Implicaciones para la seguridad: El código de depuración en producción a menudo registra datos sensibles como credenciales de usuario, claves API o PII que no deberían llegar a los registros de producción.
A console.log(usuario) puede volcar un objeto de usuario completo, incluidos los testigos de sesión, en la consola del navegador o en los registros del servidor, accesibles al personal de soporte o a las herramientas de agregación de registros. Esta es una de las vulnerabilidades de seguridad de código más comunes que detectan las herramientas automatizadas de revisión de código.
Impacto en el rendimiento: El registro excesivo de la consola crea cuellos de botella de E/S. Un punto final de alto tráfico que registre cargas útiles de solicitudes puede degradar los tiempos de respuesta en 15-30 ms por solicitud y aumentar los costes de almacenamiento de registros. El impacto en el rendimiento del registro en entornos de producción Node.js se agrava rápidamente a escala.
Mantenimiento del código: Confirmaciones temporales de código como if (true) return; o
// TODO: fix later eluden la lógica empresarial y crean confusión para futuros mantenedores. Representan una deuda técnica sin rastro de documentación.
Ampliación de la superficie de ataque: Las sentencias de depuración y el registro de errores verboso revelan rastros de pila, rutas de archivos, versiones de dependencias y flujo lógico interno, información útil para el reconocimiento durante ataques dirigidos.
Ejemplos de códigos
❌ No 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;
}
Por qué es inseguro: Las sentencias de consola registran PII (Personally Identifiable Information) y tokens de autenticación en los logs de producción. El depurador comentado crea ambigüedad sobre las rutas de ejecución. Todos estos datos son accesibles a cualquiera con acceso a los registros y proporcionan a los atacantes datos de reconocimiento.
✅ 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;
}Por qué es seguro: El registro estructurado sustituye console.log con pistas de auditoría adecuadas que capturen los eventos de negocio sin exponer datos sensibles del usuario. No existen sentencias de depuración. La lógica fluye linealmente sin derivaciones condicionales. Los registros de auditoría están centralizados, tienen acceso controlado y sólo contienen el contexto necesario para el cumplimiento y la depuración.
Conclusión
El código depurado en producción no es un problema menor, es una vulnerabilidad de seguridad, un problema de rendimiento y una carga de mantenimiento. Seguir las mejores prácticas de revisión de código seguro significa detectar estos problemas antes de que lleguen a la rama principal. Las reglas automatizadas de calidad del código deberían impedir que el código depurado llegue al control de versiones, por no hablar de la producción. La clave está en disponer de las herramientas adecuadas para detectar estos problemas antes de que se fusionen.
.avif)
