IDOR: başkasının verisini görmek için tek bir sayıyı değiştirmek

Güvensiz doğrudan nesne referansları API'lerdeki en yaygın erişim kontrolü hatasıdır: uç nokta giriş yapıp yapmadığını kontrol eder, sonra istekte adı geçen kayıt ID'si neyse onu getirir.

Örnek

Zafiyetli
app.get("/allocations/:userId", isLoggedIn, async (req, res) => {
  const docs = await allocations.find({ userId: req.params.userId });
  res.json(docs);
});
Güvenli
app.get("/allocations", isLoggedIn, async (req, res) => {
  // the user comes from the session, never from the URL
  const docs = await allocations.find({ userId: req.session.userId });
  res.json(docs);
});

Nasıl oluşur

/invoices/:id veya /users/:userId/profile gibi route'lar URL'deki ID'yi doğrudan bir veritabanı aramasına verir. 7 numaralı kullanıcı olarak giriş yapıp /invoices/8 istemek 8 numaralı kullanıcının faturasını döndürür. İlgili hatalar: tanımlı ama hiçbir route'a eklenmemiş yalnızca-admin middleware'i ve isteğin tüm gövdesini bir kayda yazmak; bu da çağıranın role veya isAdmin gibi alanları ayarlamasına izin verir.

Nasıl düzeltilir

Yetkilendirme route başına değil, kayıt başınadır.

  • Geçerli kullanıcının ID'sini istekten değil, oturumdan veya token'dan al
  • ID istekten gelmek zorundaysa, döndürmeden önce kaydın kullanıcıya ait olduğunu kontrol et
  • Rol kontrollerini her yetkili route'a uygula ve test et
  • Tüm gövdeyi kaydetmek yerine kabul edilen alanları açıkça seç

RepoVerse bunu nasıl bulur

  • YüksekKayıt istekten gelen ID ile aranıyor, sahiplik kontrolü yok

    URL'deki ID'yi değiştirmek başka bir kullanıcının verisini gösterir veya değiştirir (IDOR / BOLA).

    veri akışı · CWE-639

  • YüksekYalnızca admin'e özel middleware tanımlı ama hiçbir route'a uygulanmamış

    Admin'e özel olması gereken route'lara giriş yapmış herhangi bir kullanıcı ulaşabilir; veri değiştiriyorlarsa bu yetki yükseltmedir.

    veri akışı · CWE-285

  • Ortaİstek gövdesinin tamamı bir veritabanı kaydına yazılıyor

    Çağıran, açmayı hiç düşünmediğin alanları ayarlayabilir — `isAdmin`, `role`, `balance`.

    veri akışı · CWE-915

Sorular

IDOR ile BOLA arasındaki fark nedir?
Aynı açıktır. OWASP API Security Top 10 buna Broken Object Level Authorization (BOLA) der; eski web Top 10 Insecure Direct Object Reference derdi.
Statik analiz IDOR'u bulabilir mi?
Kısmen. RepoVerse, oturumu veya doğrulanmış kullanıcıyı hiç okumayan handler'larda istekten gelen kullanıcı, hesap veya sipariş tarzı bir ID ile yapılan aramaları işaretler. Hangi kayıtların herkese açık olması gerektiğini yalnızca sen bildiğin için bunları muhtemel olarak işaretler.

İlgili

Güncellendi 2026-10-11