Kod injection: eval'e verilen istek girdisi

eval kendisine verilen string'i kod olarak çalıştırır. O string bir istekten geldiğinde, isteği gönderen kişi sunucunun ne çalıştıracağına karar verir.

Örnek

Zafiyetli
app.post("/contributions", (req, res) => {
  const preTax = eval(req.body.preTax);
  const roth = eval(req.body.roth);
  save(preTax, roth);
});
Güvenli
app.post("/contributions", (req, res) => {
  const preTax = Number.parseInt(req.body.preTax, 10);
  const roth = Number.parseInt(req.body.roth, 10);
  if (![preTax, roth].every(Number.isFinite)) return res.sendStatus(400);
  save(preTax, roth);
});

Nasıl oluşur

Geliştiriciler "42"yi 42'ye çevirmek veya bir formülü hesaplamak için eval'e başvurur. Ama require('child_process').execSync('id') de geçerli bir JavaScript'tir. Aynısı new Function, vm.runInNewContext, string ile setTimeout ve kullanıcının verdiği şablon metnini derlemesi istenen şablon motorları için de geçerlidir. OWASP NodeGoat katkı formunda tam olarak bu hatayı barındırır.

Nasıl düzeltilir

İstek verisini çalıştırmak için neredeyse hiçbir zaman bir sebep yoktur.

  • Sayıları Number veya parseInt ile ayrıştır ve doğrula
  • Yapılandırılmış veri için JSON.parse kullan
  • Kullanıcının seçtiği davranış için izin verilen işlemlerden oluşan bir tablo kullan
  • Sabit şablonları render et ve kullanıcı verisini yalnızca değişken olarak geçir

RepoVerse bunu nasıl bulur

  • Kritikİstek girdisi kod olarak çalıştırılıyor

    İsteği gönderen, sunucuda hangi JavaScript'in çalışacağını seçer — sürecin yetkileriyle dosya okur, veritabanına ulaşır, shell açar.

    veri akışı · CWE-95

  • YüksekBir değerden kod çalıştırılıyor

    `eval`, `exec` veya `new Function` literal olmayan bir şeyle çağrılıyor.

    örüntü

  • Yüksekİstek girdisi bir şablonu seçiyor veya derliyor

    Şablon motorları ifade çalıştırır; kullanıcının kontrol ettiği şablon metni veya görünüm adı kod çalıştırmaya ya da dosya ifşasına yol açabilir.

    veri akışı · CWE-1336

Sorular

Girdiyi önce doğrularsam eval güvenli olur mu?
eval'i güvenli yapacak kadar sıkı bir doğrulama, eval'i bir ayrıştırıcıyla değiştirecek kadar da sıkıdır. Onun yerine eval'i kaldır.
Kod injection'ın önem derecesi nedir?
Kritik. Saldırgana sunucu sürecinin yetkileriyle kod çalıştırma imkânı verir; bu genelde veritabanı, ortamdaki secret'lar ve makinenin kendisi demektir.

İlgili

Güncellendi 2026-10-11