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
Código de depuración, console.log() declaraciones, lógica comentada, valores de prueba hardcodeados, o depurador los puntos de interrupción (breakpoints), se envían a producción con más frecuencia de lo que la mayoría de los equipos admiten. Estos artefactos exponen el estado interno de la aplicación, crean una sobrecarga de rendimiento y señalan a los atacantes qué partes de tu base de código fueron problemáticas durante el desarrollo. Lo que comienza como código temporal para la resolución de problemas se convierte en un riesgo de seguridad permanente si no se elimina antes del despliegue.
Por qué es importante
Implicaciones de 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 logs de producción.
A console.log(user) una declaración podría volcar un objeto de usuario completo, incluyendo tokens 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 logs. 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 en consola crea un cuello de botella de E/S. Un endpoint de alto tráfico que registra las cargas útiles de las solicitudes puede degradar los tiempos de respuesta entre 15 y 30 ms por solicitud y aumentar los costes de almacenamiento de logs. El impacto en el rendimiento del registro en entornos de producción de Node.js se agrava rápidamente a escala.
Mantenibilidad del código: Commits de código temporales como if (true) return; o
// TODO: fix later eludir la lógica de negocio y crear confusión para futuros mantenedores. Representan deuda técnica sin rastro de documentación.
Expansión de la superficie de ataque: Las sentencias del depurador y el registro de errores detallado revelan trazas de pila, rutas de archivo, versiones de dependencias y el flujo lógico interno, información útil para el reconocimiento durante ataques dirigidos.
Ejemplos de código
❌ 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é esto es inseguro: Las sentencias de consola registran PII (Información de Identificación Personal) 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 para cualquiera con acceso a los logs 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é esto es seguro? El registro estructurado sustituye a console.log con registros de auditoría adecuados que capturan 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, controlados por acceso y contienen solo el contexto necesario para el cumplimiento y la depuración.
Conclusión
Depurar código en producción no es un problema menor, es una vulnerabilidad de seguridad, un riesgo para el rendimiento y una carga para el 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 deben impedir que el código depurado llegue al control de versiones, y mucho menos a producción. La clave es disponer de las herramientas adecuadas para detectar estos problemas antes de que se fusionen.
.avif)
