حملات IDOR

حملات IDOR

حمله idor
امنیت برنامه نویسی

حملات IDOR

حملات IDOR یا همان Insecure Direct Object Reference در واقع یک خلا امنیتی است که موجب دسترسی غیرمجاز به داده ها میشود.

https://example.com/profile?
id=123

🔓 ➜ 🔒

حمله IDOR چیست؟

راه‌های پیشگیری برای توسعه‌دهندگان

 

حمله IDOR (Insecure Direct Object References) چیست؟

حمله IDOR (مخفف Insecure Direct Object References) یکی از رایج‌ترین آسیب‌پذیری‌های امنیتی در برنامه‌های وب است که در لیست OWASP Top 10 قرار دارد. این حمله زمانی اتفاق می‌افتد که یک برنامه وب به کاربر اجازه می‌دهد به‌طور مستقیم به منابع داخلی (مانند فایل‌ها، رکوردهای دیتابیس یا مسیرهای سیستم) دسترسی پیدا کند، بدون اینکه بررسی کند آیا کاربر مجوز لازم را دارد یا خیر.
بسیاری از این آسیب‌پذیری‌ها ریشه در نقص‌های ساختاری دارند؛ به همین دلیل، پیاده‌سازی روش‌های کنترل دسترسی در سازمان‌ها می‌تواند یکی از موثرترین لایه‌های دفاعی در برابر این نوع حملات باشد.

مثال ساده از حمله IDOR

فرض کنید یک سایت دارای URL زیر برای مشاهده پروفایل کاربران است:

https://example.com/profile?id=123

اگر مهاجم مقدار id را به 124 تغییر دهد و بتواند به پروفایل کاربر دیگری دسترسی پیدا کند، این یک حمله IDOR است. استفاده از پروتکل‌های استاندارد و امن نظیر OAuth 1 و OAuth 2، به توسعه‌دهندگان کمک می‌کند تا فرآیند اعطای دسترسی را با دقت و امنیت بسیار بالاتری مدیریت کنند.

⚠️ هشدار: IDOR می‌تواند منجر به افشای اطلاعات حساس، تغییر داده‌ها یا حتی حذف آنها شود. حمله IDOR یکی از آسیب‌پذیری‌های کلاسیک در لایه‌ی احراز هویت است که جایگاه ویژه‌ای در مباحث تخصصی حوزه امنیت دارد.
حمله idor چیست

چگونه از IDOR جلوگیری کنیم؟

1. اعتبارسنجی دسترسی (Authorization Checks)

همیشه قبل از نمایش یا تغییر داده‌ها، بررسی کنید که کاربر مجوز دسترسی به آن منبع را دارد. مطالعه دقیق چنین تهدیداتی، بخشی از رویکرد پیشگیرانه در حوزه گسترده امنیت سایبری محسوب می‌شود که هدف آن حفاظت از زیرساخت‌ها و داده‌هاست.

// مثال در PHP (با فریمورک Laravel)
public function showProfile($id) {
    $user = User::find($id);
    if (auth()->user()->id !== $user->id) {
        abort(403, 'دسترسی غیرمجاز');
    }
    return view('profile', ['user' => $user]);
}

2. استفاده از شناسه‌های غیرقابل حدس

به جای استفاده از اعداد ترتیبی (1, 2, 3…)، از UUID یا توکن‌های تصادفی استفاده کنید.

// مثال در Python (با Flask)
from uuid import uuid4

user_id = uuid4()  # تولید یک شناسه تصادفی
print(user_id)  # مثلاً: 'a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8'

3. رمزنگاری پارامترهای حساس

اگر لازم است شناسه‌ها در URL نمایش داده شوند، می‌توانید آنها را رمزنگاری کنید.

// مثال در Node.js (با Express و crypto)
const crypto = require('crypto');

function encryptId(id) {
    const cipher = crypto.createCipher('aes-256-cbc', 'secret-key');
    let encrypted = cipher.update(id.toString(), 'utf8', 'hex');
    encrypted += cipher.final('hex');
    return encrypted;
}

function decryptId(encrypted) {
    const decipher = crypto.createDecipher('aes-256-cbc', 'secret-key');
    let decrypted = decipher.update(encrypted, 'hex', 'utf8');
    decrypted += decipher.final('utf8');
    return decrypted;
}

4. استفاده از توکن‌های موقت (One-Time Tokens)

برای عملیات حساس (مثل تغییر رمز عبور)، از توکن‌های یکبارمصرف استفاده کنید. در بسیاری از سیستم‌های مدرن، مدیریت نادرست توکن‌های احراز هویتJWT، می‌تواند مسیر را برای سوءاستفاده از شناسه‌های کاربری و وقوع حملات دسترسی باز کند.

// مثال در Django
from django.contrib.auth.tokens import PasswordResetTokenGenerator

token_generator = PasswordResetTokenGenerator()
token = token_generator.make_token(user)

جمع‌بندی

  • IDOR یک حمله رایج است که به مهاجمان اجازه دسترسی غیرمجاز به داده‌ها را می‌دهد.
  • برای جلوگیری از آن، همیشه اعتبارسنجی دسترسی (Authorization) را انجام دهید.
  • از شناسه‌های غیرقابل حدس (مثل UUID) استفاده کنید.
  • در صورت نیاز، پارامترهای URL را رمزنگاری کنید.
💡 نکته نهایی: هیچ‌گاه به بررسی‌های سمت کلاینت اعتماد نکنید. تمام اعتبارسنجی‌ها باید در سمت سرور انجام شوند.

دیدگاه خود را اینجا بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

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