Kural
Kaldır hata ayıklama ve geçici kod kaldırın .
Kod bu atlayan çıkış çıkış hata ayıklama bilgisini
veya çalıştırmayı çalıştırmayı hata hata ayıklama oldu muhtemelen
bırakılmış geride kazara geliştirme geliştirme sırasında
Desteklenen diller: 45+Giriş
Kodda hata ayıklama, console.log() ifadelere, yorum satırına alınmış mantık yapılarına, sabit kodlanmış test değerlerine veya hata ayıklayıcı Hata durdurma noktaları, çoğu ekibin itiraf ettiğinden daha sık üretim ortamına aktarılır. Bu öğeler, uygulamanın iç durumunu ortaya çıkarır, performans yükü yaratır ve saldırganlara, kod tabanınızın hangi kısımlarının geliştirme aşamasında sorunlu olduğunu gösterir. Sorun giderme amacıyla geçici olarak yazılan kodlar, dağıtımdan önce kaldırılmazsa kalıcı bir güvenlik riski haline gelir.
Neden önemli?
Güvenlik etkileri: Üretim ortamındaki hata ayıklama kodları, genellikle üretim günlüklerine ulaşmaması gereken kullanıcı kimlik bilgileri, API anahtarları veya kişisel tanımlayıcı bilgiler (PII) gibi hassas verileri günlüğe kaydeder.
Bir console.log(user) Bu komut, oturum belirteçleri de dahil olmak üzere bir kullanıcı nesnesinin tamamını, destek ekibinin veya günlük toplama araçlarının erişebileceği tarayıcı konsoluna ya da sunucu günlüklerine yazabilir. Bu, otomatik kod inceleme araçlarının tespit ettiği en yaygın kod güvenlik açıklarından biridir.
Performans üzerindeki etkisi: Aşırı konsol günlüğü kaydı, I/O darboğazı yaratır. Yoğun trafiğe sahip bir uç noktadaki günlük kaydı istek yükleri, istek başına yanıt sürelerini 15-30 ms kadar uzatabilir ve günlük depolama maliyetlerini artırabilir. Node.js üretim ortamlarında günlük kaydının performans üzerindeki etkisi, ölçek büyüdükçe hızla artar.
Kod sürdürülebilirliği: Şu tür geçici kod işlemeleri (commit): if (true) return; veya // TODO: fix later iş mantığını atlar ve gelecekte bakım yapacak kişiler için kafa karışıklığı yaratır. Bunlar, herhangi bir dokümantasyon izi bırakmayan teknik borçlardır.
Saldırı yüzeyinin genişlemesi: Debugger ifadeleri ve ayrıntılı hata günlükleri (logging); yığın izlerini (stack trace), dosya yollarını, bağımlılık sürümlerini ve dahili mantık akışını açığa çıkarır. Bu bilgiler, hedefli saldırılar sırasındaki keşif faaliyetleri için saldırganlara fayda sağlar.
Kod örnekleri
❌ Kural dışı:
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;
}
Neden güvenli değil: Console ifadeleri, PII (Kişisel Olarak Tanımlanabilir Bilgiler) ve kimlik doğrulama token'larını üretim (production) günlüklerine kaydeder. Yorum satırına alınmış debugger, yürütme yolları hakkında belirsizlik yaratır. Tüm bu verilere günlük (log) erişimi olan herkes ulaşabilir ve bu durum, saldırganlara keşif verileri sağlar.
✅ Kurallara uygun:
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;
}Bunun neden güvenli olduğu: Yapılandırılmış günlük kaydı (structured logging), console.log ifadesinin yerini; hassas kullanıcı verilerini açığa çıkarmadan iş olaylarını yakalayan uygun denetim izleriyle (audit trail) değiştirir. Hata ayıklama (debug) ifadeleri bulunmaz. Mantık, koşullu atlamalar olmaksızın doğrusal olarak ilerler. Denetim günlükleri merkezileştirilmiştir, erişim denetimine tabidir ve yalnızca uyumluluk ile hata ayıklama için gereken bağlamı içerir.
Sonuç
Üretim ortamındaki hata ayıklama kodları küçük bir sorun değildir; bir güvenlik açığı, performans riski ve bakım yüküdür. Güvenli kod inceleme en iyi uygulamalarını takip etmek, bu sorunları ana dalınıza (main branch) ulaşmadan önce yakalamak anlamına gelir. Otomatik kod kalitesi kuralları, hata ayıklama kodlarının üretime geçmesini bir yana, versiyon kontrolüne ulaşmasını bile engellemelidir. Buradaki kilit nokta, bu sorunları birleşmeden (merge) önce yakalayacak doğru araçlara sahip olmaktır.

