CodeBlanks Logo Icon CodeBlanks

Prototype pollution

JavaScript kursu · İleri seviye · Ders 17/100

Prototype pollution riskini ve hasOwnProperty ile nasıl korunacağını öğrenirsin.

Prototype pollution riski

JavaScript'te for...in döngüsü, bir nesnenin kendi özelliklerinin yanı sıra prototip zincirindeki özellikleri de dolaşır. Bu, beklenmedik özelliklerin ortaya çıkmasına yol açabilir.

Object.prototype.gift = 'sürpriz';
const obj = { name: 'Ayşe' };
for (const key in obj) {
  console.log(key); // name, gift
}

Bu duruma prototype pollution benzeri sorunlar denir. Eklenen gift, hiç beklenmeyen yerlerde görünür. Bu yüzden hasOwnProperty ile süzmek gerekir.

Güvenli dolaşma

hasOwnProperty, bir özelliğin nesnenin kendisine mi yoksa prototip zincirine mi ait olduğunu söyler. for...in içinde bununla süzme yaparsın.

for (const key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key, obj[key]);
  }
}

Daha kısa yol: Object.keys(obj) yalnızca kendi özelliklerini dizi olarak verir, prototipi dahil etmez. İkisi de güvenlidir; Object.keys çoğu durumda daha okunaklıdır.

Uygulama for...in içinde hasOwnProperty ile süz

obj nesnesini { name: 'Ayşe', age: 28 } olarak tanımla. Object.prototype.gift'e 'sürpriz' değerini ata. for...in ile obj'nin anahtarlarını dolaş; obj.hasOwnProperty(key) doğruysa console.log(key, obj[key]) çağır. Sonra console.log(Object.keys(obj)) ile de dizi halinde yazdır.

Örnek çözümü göster
Object.prototype.gift = 'sürpriz';
const obj = { name: 'Ayşe', age: 28 };
for (const key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key, obj[key]);
  }
}
console.log(Object.keys(obj));

Kendini test et

  1. for...in ile dolaşırken ne yapmalısın?

    • for...in zaten yalnızca kendi özelliklerini dolaşır
    • hasOwnProperty ile yalnızca kendi özellikleri süz
    • Object.create(null) ile nesneyi yeniden üret
    • Prototipi sil
    Cevabı göster

    hasOwnProperty ile yalnızca kendi özellikleri süz — Doğru! hasOwnProperty ile yalnızca kendi özellikleri alırsın.

  2. for...in içinde hasOwnProperty

    for (const key in obj) {
      if (obj.____(key)) {
        console.log(key);
      }
    }
    Cevabı göster
    for (const key in obj) {
      if (obj.hasOwnProperty(key)) {
        console.log(key);
      }
    }
  3. Güvenli ve tehlikeli desenleri eşleştir

    for...in
    prototip dahil
    Object.keys
    sadece kendi
    hasOwnProperty
    kendi özellik kontrolü
    Object.prototype.x = ...
    tehlikeli

İleri seviye bölümündeki tüm dersler