CodeShot
Seniorسختی 3 از ۵· در 25٪ مصاحبه‌های این حوزه پرسیده شده

IDOR (Insecure Direct Object Reference) چیست؟

نشان کردن

پاسخ کوتاه

وقتی یک اندپوینت فقط بر اساس Id ارسالی کاربر داده برمی‌گرداند، بدون بررسی این‌که آیا کاربر واقعاً مالک آن منبع است.

پاسخ کامل

مثلاً /api/orders/123 بدون بررسی مالکیت، هر کاربر لاگین‌شده‌ای می‌تواند فقط با تغییر عدد، سفارش کاربر دیگر را ببیند. راه‌حل این است که همیشه علاوه بر Id، مالکیت منبع هم در کوئری بررسی شود.

مثال کد

csharp\nvar order = db.Orders.Find(id, o => o.UserId == currentUserId);\n

اشتباه رایج

بررسی‌نکردن مالکیت منبع در اندپوینت‌های GET/PUT/DELETE، فقط اعتماد به این‌که کاربر لاگین کرده کافی است.