این درس درباره کنترل دسترسی است. تمرین را فقط در اپلیکیشن محلی خودتان یا محیطی با مجوز صریح انجام دهید. IDOR زمانی رخ می‌دهد که سرور برای شیء درخواستی، مجوز کاربر را بررسی نکند.

ورود کافی نیست

فرض کنید دو حساب آزمایشی A و B هرکدام یک یادداشت دارند. ورود A به سیستم نباید به او اجازه خواندن یادداشت B را بدهد. دانستن شناسه یادداشت اثبات مالکیت نیست؛ شناسه تصادفی هم جای بررسی مجوز را نمی‌گیرد.

کنترل در سرور

در این شبه‌کد، هویت کاربر از نشست معتبر می‌آید. جست‌وجو هم‌زمان شناسه شیء و مالک مجاز را محدود می‌کند. بسته به سیاست محصول، منابع مشترک به قواعد بیشتری نیاز دارند.

user = authenticated_user()
note = find_note(id=requested_id, owner_id=user.id)

if note is None:
    return not_found()
return note

تمرین با دو حساب آزمایشی

دو حساب و دو یادداشت ساختگی ایجاد کنید. با A، خواندن یادداشت A باید موفق و دسترسی به یادداشت B باید رد شود. همین بررسی را برای ویرایش و حذف تکرار کنید. نتیجه مورد انتظار و واقعی را ثبت کنید و پس از اصلاح، آزمون را دوباره اجرا کنید.

تمرین

کدام اقدام، ریشه مشکل IDOR را رفع می‌کند؟

  • مخفی کردن دکمه در رابط کاربری
  • فقط طولانی کردن شناسه
  • بررسی مجوز هر شیء در سرور
سرور باید برای هر عملیات، مجوز کاربر نسبت به همان شیء را بررسی کند.

OWASP — IDOR Prevention ↗