Aikido

Commit Yapmadan Önce Hata Ayıklama ve Geçici Kodları Kaldırın: Bir Güvenlik ve Performans Kılavuzu

Mantık hatası

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üvenlikle ilgili hususlar: Ü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.

Kodun bakım kolaylığı: Şu şekilde yapılan geçici kod gönderimleri: if (true) return; veya
// TODO: fix later iş mantığını atlar ve gelecekteki bakım görevlileri için kafa karışıklığına yol açar. Bunlar, herhangi bir belgeleme izi bulunmayan teknik borç niteliğindedir.

Saldırı yüzeyinin genişlemesi: Hata ayıklama ifadeleri ve ayrıntılı hata günlüğü kayıtları, yığın izlerini, dosya yollarını, bağımlılık sürümlerini ve dahili mantık akışını ortaya çıkarır; bu bilgiler, hedefli saldırılar sırasında keşif amacıyla yararlıdır.

Kod örnekleri

❌ Uygun değil:

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;
}

Bunun neden güvenli olmadığı: Konsol ifadeleri, PII (Kişisel Tanımlanabilir Bilgiler) ve kimlik doğrulama belirteçlerini üretim günlüklerine kaydeder. Yorumlanmış hata ayıklayıcı, yürütme yolları konusunda belirsizlik yaratır. Bu verilerin tümüne, günlük erişimi olan herkes erişebilir ve bu da saldırganlara keşif verileri sağlar.

✅ Uygunluk:

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ı, şunun yerine geçer: console.log hassas kullanıcı verilerini ifşa etmeden iş olaylarını kaydeden uygun denetim izleri ile. Hata ayıklama ifadeleri bulunmamaktadır. Mantık, koşullu atlamalar olmaksızın doğrusal bir şekilde ilerler. Denetim günlükleri merkezileştirilmiştir, erişim kontrollüdür ve yalnızca uyumluluk ve hata ayıklama için gerekli bağlamı içerir.

Sonuç

Üretim ortamındaki hata ayıklama kodu önemsiz bir sorun değildir; bu, bir güvenlik açığı, performans sorunu ve bakım yüküdür. Güvenli kod inceleme en iyi uygulamalarına uymak, bu sorunları ana dalınıza ulaşmadan önce tespit etmek anlamına gelir. Otomatik kod kalitesi kuralları, hata ayıklama kodunun sürüm kontrol sistemine, bırakın üretim ortamına ulaşmasını, oraya bile girmesini engellemelidir. Önemli olan, bu sorunları birleştirme işleminden önce tespit edebilecek doğru araçlara sahip olmaktır.

Sık Sorulan Sorular

Sorularınız mı var?

Peki ya üretim ortamında yasal ağaç kesimi ne olacak?

Node.js için Winston, Pino veya Bunyan gibi yapılandırılabilir günlükleme seviyelerine sahip yapılandırılmış bir günlükleme kütüphanesi kullanın. Üretim ortamında şu seviyede çalıştırılmalıdır: BİLGİ veya UYARI seviye, asla HATA AYIKLAMA. Yalnızca gerekli bağlam bilgilerini günlüğe kaydedin; kimlik bilgilerini veya jetonları içeren nesnelerin tamamını asla kaydetmeyin. Üretim ortamında hata ayıklamaya yönelik bu yaklaşım, aşağıdaki güvenlik riskleri olmaksızın gözlemlenebilirliği sağlar: console.log.

console.log kullanmadan üretim ortamında hata ayıklamayı nasıl yapabilirim?

APM çözümleri (DataDog, New Relic), dağıtık izleme (Jaeger, Zipkin) ve uygun hata izleme araçları (Sentry, Rollbar) gibi gözlemlenebilirlik araçlarını devreye alın. Bunlar, kodu hata ayıklama ifadeleriyle doldurmadan yapılandırılmış içgörüler sağlar. Acil sorunlar için, otomatik olarak süresi dolan özellik bayrakları aracılığıyla geçici olarak günlük kaydı ekleyin. Modern üretim ortamı hata ayıklama araçları, size şundan daha iyi bir görünürlük sağlar: konsol hiçbir açıklamanın yapamayacağı kadar.

Ya referans olması için kodu yorum satırı olarak bırakmam gerekirse?

Bunu ait olduğu yer olan sürüm kontrol geçmişine taşıyın. Kaldırılan mantığa atıfta bulunmanız gerekiyorsa, kod yorumunda ilgili commit’in SHA’sına bağlantı verin: // Önceki uygulama: abc123 commit’ine bakın. Bu, geçmişi korurken mevcut kodu temiz tutar ve kod kalitesi konusunda en iyi uygulamalara uygun hareket etmenizi sağlar.

Tüm console. yöntemlerini engelleyelim mi?*

Hayır. console.error() ve console.warn(), düzeltilemeyen hatalar veya kullanımdan kaldırılmış API’lere ilişkin uyarılar için üretim ortamında meşru kullanım alanlarına sahiptir. Commit yapmadan önce console.log(), console.debug(), console.trace() ve console.dir() yöntemlerini kaldırın. Çoğu otomatik kod inceleme platformu, kabul edilebilir ve sorunlu konsol yöntemlerini birbirinden ayırt edebilir.

Peki ya test dosyalarındaki hata ayıklama ifadeleri?

Test dosyaları için farklı kurallar geçerli olabilir. *.test.js veya *.spec.js dosyalarında hata ayıklayıcının kullanılmasına izin vermek mantıklıdır, çünkü bu dosyalar üretim ortamlarında asla çalıştırılmaz. Kod kalitesi kuralları, test takımlarını değil, kaynak kodunu hedef almalıdır.

Hata ayıklama kodu içeren üçüncü taraf bağımlılıklarını nasıl ele almalıyız?

Üçüncü taraf kodları doğrudan kontrol edemezsiniz, ancak hata ayıklama yükünü en aza indirecek bağımlılıkları seçebilir, kullanılmayan kodları ortadan kaldırmak için “tree-shaking” ve kod küçültme yöntemlerini kullanabilir ve hata ayıklama kodlarını yeniden getirebilecek güncellemeleri takip edebilirsiniz. İşte bu noktada, kodunuzu ve bağımlılıklarınızı analiz eden güvenlik tarayıcıları büyük önem kazanır.

Tüm günlük kayıtlarını kaldırmanın performans üzerindeki etkisi nedir?

Gerçek performans artışı, istek işleyiciler, döngüler ve veri dönüşümleri gibi yoğun işlem yollarındaki yüksek frekanslı günlük kaydı işlemlerinin ortadan kaldırılmasından kaynaklanır. Saniyede 1000 istek işleyen bir istek işleyicideki tek bir console.log() çağrısı, saniyede 1000 I/O işlemi oluşturur. Stratejik yapılandırılmış günlük kaydı, gerekli gözlemlenebilirliği sağlarken 1 ms’den az bir ek yük getirir; bu da onu üretim ortamlarında JavaScript hata ayıklama için doğru dengeyi sunar.

Şimdi güvenliğinizi sağlayın

Kodunuzu, bulutunuzu ve çalışma zamanınızı tek bir merkezi sistemde güvenceye alın.
Güvenlik açıklarını otomatik olarak hızla bulun ve düzeltin.

Kredi kartı gerekmez | Tarama sonuçları 32 saniyede.