حملات 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 است.

⚠️ هشدار: 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)

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

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

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

جمع‌بندی

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

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

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

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