لماذا الصلاحيات؟ المستخدمون والأدوار
لماذا يحتاج كل تطبيق ويب متعدد المستخدمين تصميمًا مدروسًا للصلاحيات، ومن أين يبدأ هذا التصميم؟ ⏱ نحو 40 دقيقة.
- تميّز المصادقة من التفويض، والرد 401 من 403.
- تشرح عواقب ضعف التحكم بالوصول بأمثلة.
- تطبّق مبادئ أقل صلاحية والمنع افتراضيًّا وفصل المهام والملكية.
- تحلل الأدوار والبيانات الحساسة من متطلبات المستخدمين.
١المصادقة والتفويض: سؤالان مختلفان
كل طلب يصل إلى الخادم يمر بسؤالين بالترتيب: المصادقة Authentication تسأل «من أنت؟» وتتحقق من الهوية (كلمة مرور، رمز). ثم التفويض Authorization يسأل «هل يحق لك هذا؟» ويتحقق من الصلاحية. نجاح الأول لا يعني نجاح الثاني: نورة دخلت بنجاح، لكن هذا لا يعني أنها تستطيع رؤية التقارير المالية.
sequenceDiagram actor U as المستخدم participant S as الخادم U->>S: البريد + كلمة المرور Note over S: المصادقة: من أنت؟ S-->>U: رمز الدخول (أنت نورة، موظفة تسجيل) U->>S: اعتماد الطلب 7 + الرمز Note over S: التفويض: هل يحق لك هذا؟ alt دورها يسمح بالاعتماد S-->>U: 200 تم الاعتماد else لا يسمح S-->>U: 403 ممنوع end
الرد 401 يعني «لم نعرف من أنت» (فشل المصادقة)، و403 يعني «عرفناك، لكن ليس لك هذا» (فشل التفويض). تصميم الصلاحيات في هذه الوحدة يخص التفويض.
٢ماذا يحدث حين يضعف التحكم بالوصول؟
«ضعف التحكم بالوصول» Broken Access Control يتصدر قائمة OWASP Top 10 لأخطر ثغرات تطبيقات الويب. أمثلة واقعية على ما قد يحدث في «دورات» لو أُهمل التصميم:
| الثغرة | ما يحدث | العاقبة |
|---|---|---|
| تغيير رقم في الرابط | المتدرب يغيّر /enrollments/15 إلى /16 فيرى تسجيل غيره | تسريب بيانات شخصية ومخالفة نظام حماية البيانات |
| زر مخفي فقط | زر «اعتماد» مخفي عن المتدرب في الواجهة، لكن الخادم لا يتحقق | متدرب يعتمد طلبه بنفسه بطلب مباشر |
| صلاحيات زائدة | كل الموظفين «مدير» لأن ذلك أسهل | خطأ واحد أو حساب مخترق يكشف كل شيء |
| حساب قديم | موظف ترك العمل وحسابه فعّال | وصول غير مشروع بعد انتهاء العلاقة |
٣مبادئ التصميم
| المبدأ | معناه | في «دورات» |
|---|---|---|
| أقل صلاحية Least Privilege | كل دور يأخذ الحد الأدنى الذي يحتاجه لعمله فقط | المدرب يرى أسماء مسجلي دوراته فقط، لا جوالاتهم ولا دورات غيره |
| المنع افتراضيًّا Deny by Default | كل شيء ممنوع ما لم يُسمح به صراحة | نقطة نهاية جديدة بلا قاعدة صلاحية = ممنوعة للجميع |
| فصل المهام | العملية الحساسة لا ينجزها شخص واحد من البداية للنهاية | من يعتمد استرداد المبلغ غير من طلبه |
| الملكية | بعض البيانات تخص صاحبها فقط | المتدرب يرى تسجيلاته هو، لا كل التسجيلات |
| قابلية التدقيق | العمليات الحساسة تُسجَّل: من، وماذا، ومتى | سجل لكل اعتماد ورفض واسترداد |
٤تحليل الأدوار من متطلبات المستخدمين
من الخطة: «تحليل متطلبات المستخدمين والأدوار المختلفة لتحديد الصلاحيات المناسبة لكل مستخدم». نبدأ من أصحاب المصلحة وحالات الاستخدام التي جمعناها، فلكل دور أهدافه، ومنها تُشتق صلاحياته:
ثم نحدد البيانات الحساسة، لأن الصلاحيات تحميها هي في النهاية:
| البيانات | حساسيتها | من يحتاجها فعلًا؟ |
|---|---|---|
| رقم الهوية والجوال | شخصية عالية | موظفة التسجيل فقط |
| المبالغ المدفوعة | مالية | المدير والمحاسب |
| قائمة أسماء المسجلين | متوسطة | المدرب لدوراته، وموظفة التسجيل |
| وصف الدورات وأسعارها | عامة | الجميع، حتى الزائر |
توقّع وتحقّق
مستخدم سجّل الدخول بنجاح وطلب صفحة التقارير المالية بلا صلاحية. الرد المناسب:
«المدرب يرى أسماء مسجلي دوراته فقط» تطبيق لمبدأ:
لماذا لا يكفي إخفاء زر «اعتماد» عن المتدرب؟
نقطة نهاية جديدة بلا قاعدة صلاحية. حسب «المنع افتراضيًّا»:
الخلاصة
- المصادقة: من أنت؟
(401). التفويض: هل يحق لك؟(403). - ضعف التحكم بالوصول أخطر ثغرات الويب حسب
OWASP. - الحماية في الخادم دائمًا؛ إخفاء الزر لتحسين التجربة فقط.
- المبادئ: أقل صلاحية، والمنع افتراضيًّا، وفصل المهام، والملكية، والتدقيق.
- نبدأ التصميم من الأدوار وأهدافها، والبيانات الحساسة ومن يحتاجها.
تحدٍّ تصميمي: تحليل أدوار «دورات»
متوسطاكتب تحليل الأدوار لنظام «دورات»: الأدوار ومهامها، والبيانات الحساسة ومن يحتاجها، والممنوعات الصريحة التي تطبق مبدأ أقل صلاحية.
- خمسة أدوار على الأقل، كل دور في سطر: اسم الدور ثم «:» ثم مهامه. لا تنس الزائر غير المسجل.
- ثلاثة أنواع من البيانات الحساسة، كل منها في سطر مع من يحتاجها.
- ثلاث ممنوعات صريحة على الأقل، كل منها في سطر يبدأ بـ «لا».
- خمسة أدوار على الأقل
- كل دور: الاسم ثم «:» ثم المهام
- دور الزائر غير المسجل موجود
- أدوار مختلفة
- ثلاثة أنواع بيانات حساسة على الأقل
- كل نوع معه من يحتاجه
- ثلاث ممنوعات على الأقل
- كل ممنوع يبدأ بـ «لا»
💡 تلميح 1
💡 تلميح 2
نموذج واحد من إجابات كثيرة صحيحة.
- الأدوار ومهامها (كل دور في سطر)
- الزائر: يتصفح الدورات وأسعارها
المتدرب: يسجل ويدفع ويرى تسجيلاته
المدرب: يرى قائمة مسجلي دوراته ويسجل الحضور
موظفة التسجيل: تعتمد الطلبات وترفضها
المدير: يرى التقارير ويدير الحسابات والأدوار - البيانات الحساسة ومن يحتاجها
- رقم الهوية والجوال ← موظفة التسجيل
المبالغ المدفوعة ← المدير والمحاسب
أسماء المسجلين ← المدرب لدوراته فقط - الممنوعات الصريحة (كل منها يبدأ بـ «لا»)
- لا يرى المدرب جوالات المتدربين
لا يرى المتدرب تسجيلات غيره
لا تعتمد الموظفة طلبًا قدّمته لنفسها
لا يعدّل أحد الأدوار إلا المدير