تخطَّ إلى المحتوى
ARAB CODEمجتمع المطورين العرب

التفويض (Authorization)

التفويض يقرر ما يحق للمستخدم المصادَق فعله. ضعف التحكم بالوصول (Broken Access Control) يتصدر قائمة OWASP Top 10 لعام 2021.

المبادئ

  • الرفض افتراضياً: كل عملية ممنوعة ما لم يُسمح بها صراحة.
  • أقل صلاحية: امنح كل دور ما يحتاجه فقط.
  • التحقق على الخادم في كل طلب: إخفاء زر في الواجهة ليس حماية؛ يمكن إرسال الطلب مباشرة.

نماذج شائعة

التحكم المبني على الأدوار (RBAC): الصلاحيات تُمنح لأدوار، والمستخدمون يُعطون أدواراً.

const ROLE_PERMISSIONS = {
  member:    ['post.create'],
  moderator: ['post.create', 'post.hide'],
  admin:     ['post.create', 'post.hide', 'user.ban'],
} as const;

التحقق من الملكية: كثير من القواعد تعتمد على المورد نفسه، لا على الدور فقط:

function canEditPost(user: User, post: Post) {
  return post.authorId === user.id || hasPermission(user, 'post.hide');
}

IDOR: الثغرة الأكثر شيوعاً

GET /api/invoices/1043

إذا أعاد الخادم الفاتورة لأي مستخدم مسجّل لمجرد معرفة رقمها، فهذه ثغرة IDOR (Insecure Direct Object Reference). الحل: قيّد الاستعلام بالمالك.

SELECT * FROM invoices WHERE id = $1 AND user_id = $2;

أخطاء شائعة

  • الاعتماد على حقول يرسلها العميل مثل role أو isAdmin في جسم الطلب.
  • التحقق في صفحة العرض ونسيانه في واجهة API التي تنفذ العملية.
  • رسائل تكشف وجود مورد لا يملكه المستخدم؛ الأسلم إرجاع 404.

المصادر

  1. OWASP Authorization Cheat Sheet
  2. OWASP Top 10 — Broken Access Control