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
app.get("/allocations/:userId", isLoggedIn, async (req, res) => {
const docs = await allocations.find({ userId: req.params.userId });
res.json(docs);
});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
- CSRF: kullanıcılarının hiç göndermek istemediği isteklerCSRF (CWE-352) giriş yapmış bir ziyaretçinin tarayıcısına sitene nasıl form gönderttirir; CSRF token'ları ve SameSite cookie'leri bunu nasıl durdurur.
- Güvenli oturum cookie'leri: bayraklar ve giriş adımıOturum cookie'lerini güvenle ayarla: Secure, HttpOnly ve SameSite bayrakları (CWE-614, CWE-1004), session fixation'a karşı girişte oturumu yenileme, Express örnekleriyle.
- Kod, secret ve bağımlılıklar için GitHub güvenlik taramasıGitHub reposunu injection açıkları, sızmış secret'lar ve zafiyetli bağımlılıklar için tara. İstekten tehlikeli çağrıya veri akışı izi ve çözüm önerileri.
Güncellendi 2026-10-11