Šta je IDOR?
Insecure Direct Object Reference (IDOR) se dešava kada aplikacija koristi identifikator koji kontroliše korisnik (ID, UUID, email, ime fajla) za direktan pristup objektu u bazi bez provere da li logovani korisnik ima pravo pristupa tom objektu.
Klasičan scenario
Korisnik pregleda svoju porudžbinu: https://prodavnica.rs/orders/1247
Menja broj: https://prodavnica.rs/orders/1246
Ako server ne proverava da li porudžbina 1246 pripada logovanom korisniku, napadač vidi tuđu porudžbinu — uključujući ime, adresu i detalje plaćanja.
Realni primeri iz bugbounty programa
- Facebook (2012): IDOR u graph API-ju omogućavao brisanje tuđih fotografija
- Uber (2016): IDOR u putovanjima (trip ID) omogućavao pristup GPS podacima svih korisnika
- Instagram: IDOR u password reset tokenu — mogućnost preuzimanja naloga
- Srpski e-commerce (2024): IDOR u fakturama — pristup finansijskim podacima konkurencije (interno istraživanje)
Tipovi IDOR ranjivosti
URL/Query parameter IDOR
GET /api/users/1042/profile
→ promeni u /api/users/1043/profile
Body parameter IDOR
POST /api/update-address
{"user_id": 1042, "address": "Nova adresa"}
→ promeni user_id u 1043
IDOR putem predvidivog identifikatora
Sekvencijalni ID-ovi (1, 2, 3, ...) su najlakši za eksploatisanje — napadač jednostavno iterira. Ali i UUID-ovi mogu biti predvidivi ako se generišu slabim PRNG-om.
Blind IDOR
Server ne vraća podatke, ali izvršava akciju — npr. brisanje fajla, promena statusa, slanje emaila tuđem nalogu.
IDOR je broj jedan na OWASP Top 10 2021 (A01: Broken Access Control) jer ga automatski skeneri teško otkrivaju — potrebna je autentifikovana sesija i razumevanje aplikacione logike. Shieldome Scout testira vidljive obrasce pristupa sa validiranim sesijama.
Odbrana od IDOR-a
1. Autorizacione provere na svakom zahtevom
Svaki pristup objektu mora biti propraćen proverom: da li logovani korisnik ima pravo pristupa ovom specifičnom objektu?
order = Order.query.get(order_id)
if order.user_id != current_user.id:
abort(403) # Forbidden
2. Nikada ne verujte klijentskom ID-u za vlasništvo
Korisnik ne sme da kontroliše user_id ni u query parametrima ni u request body-ju. Uvek koristite ID iz autentifikovanog tokena/sesije.
3. Indirektni identifikatori
Umesto direktnog ID-a iz baze, koristite reference koji imaju smisao samo za tog korisnika — npr. UUID scope-ovan na korisnikovu sesiju.
4. Penetration testing i code review
IDOR zahteva manuelno testiranje: tester mora imati dva različita naloga i testirati pristup resursima jednog naloga sa drugim. Automatski skeneri ovo ne mogu pouzdano detektovati bez aplikacionog konteksta.
5. Logging neuspelih pokušaja pristupa
Ako korisnik pokušava pristupiti resursima koji ne postoje ili mu ne pripadaju, to mora biti zabeleženo. Više od 10 grešaka u kratkom periodu je signal za alarm.
Proverite bezbednost vašeg sajta
Profesionalna procena ranjivosti. OWASP Top 10, dark web monitoring, PDF izveštaj za 2–3 radna dana.
Zatražite procenu →