التفويض (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.