دليل واضح لمطوري PHP لفهم أساسيات الأمان بشكل صحيح
في عالم تطوير الويب، هناك مصطلحان يتكرران كثيرًا:
Authentication (المصادقة) و Authorization (التفويض).
رغم أن الفرق بينهما أساسي جدًا، إلا أن الكثير من المطورين—خصوصًا في البداية—يخلطون بينهما، مما يؤدي إلى أخطاء خطيرة في تصميم الأنظمة.
في هذا المقال، سنشرح الفرق بين Authentication وAuthorization بشكل عملي، ولماذا يحدث هذا الخلط، وكيف تتعامل معهما بشكل صحيح في تطبيقات PHP.
أولًا: ما هو Authentication (المصادقة)؟
التعريف ببساطة:
Authentication يعني:
👉 التحقق من هوية المستخدم
بمعنى آخر:
هل أنت فعلًا الشخص الذي تدّعي أنك هو؟
مثال:
- المستخدم يدخل:
- البريد الإلكتروني
- كلمة المرور
النظام يتحقق:
✔ هل هذه البيانات صحيحة؟
✔ هل الحساب موجود؟
👉 إذا نعم → تم التحقق من الهوية (Authenticated)
أمثلة على Authentication:
- تسجيل الدخول (Login)
- تسجيل عبر Google أو Facebook
- استخدام OTP (رمز مؤقت)
- بصمة الإصبع أو التعرف على الوجه
ثانيًا: ما هو Authorization (التفويض)؟
التعريف ببساطة:
Authorization يعني:
👉 تحديد ماذا يمكن للمستخدم أن يفعل
بمعنى آخر:
بعد التأكد من هويتك… ماذا يُسمح لك أن تفعل؟
مثال:
- مستخدم عادي:
- يمكنه مشاهدة المنتجات
- لا يمكنه حذفها
- مدير (Admin):
- يمكنه إضافة وحذف المنتجات
👉 هذا هو Authorization
الفرق الأساسي في جملة واحدة
- Authentication = من أنت؟
- Authorization = ماذا يمكنك أن تفعل؟
ترتيب العملية داخل النظام
من المهم جدًا فهم الترتيب:
- Authentication
- Authorization
لماذا؟
لأنك لا تستطيع تحديد الصلاحيات قبل معرفة هوية المستخدم.
مثال عملي كامل
نظام متجر إلكتروني
الخطوة 1: تسجيل الدخول
- يتم التحقق من البريد وكلمة المرور
👉 Authentication
الخطوة 2: الدخول إلى لوحة التحكم
- هل المستخدم Admin؟
👉 Authorization
مقارنة واضحة بين Authentication و Authorization
| المعيار | Authentication | Authorization |
|---|---|---|
| الهدف | التحقق من الهوية | تحديد الصلاحيات |
| التوقيت | قبل الوصول للنظام | بعد تسجيل الدخول |
| السؤال الأساسي | من أنت؟ | ماذا يمكنك أن تفعل؟ |
| الأدوات | Password, OTP, OAuth | Roles, Permissions |
| النتيجة | User Authenticated | Access Granted/Denied |
لماذا يخلط المطورون بينهما؟
1. التشابه في المصطلحات
كلاهما مرتبط بالأمان، ويأتيان معًا في نفس السياق.
2. يحدثان في نفس العملية
في كثير من الأحيان:
- المستخدم يسجل الدخول
- ثم يتم تحديد صلاحياته
👉 فيظن المطور أنهما نفس الشيء
3. بعض الأنظمة تدمجهما
بعض الأدوات أو Frameworks تجعل العملية تبدو كأنها واحدة.
4. ضعف الفهم المفاهيمي
المطور يركز على الكود… وليس على المفهوم
خطأ شائع وخطير
الخلط بينهما قد يؤدي إلى:
- إعطاء صلاحيات بدون تحقق
- أو منع مستخدم صحيح من الوصول
مثال خطير:
- التحقق فقط من أن المستخدم مسجل دخول
- بدون التحقق من صلاحياته
👉 أي مستخدم يمكنه الوصول إلى Admin Panel ❌
كيف تطبق Authentication في PHP؟
يتم عبر:
- تسجيل الدخول (Login System)
- Sessions أو Tokens
- تخزين بيانات المستخدم
كيف تطبق Authorization في PHP؟
يتم عبر:
- Roles (أدوار مثل Admin / User)
- Permissions (صلاحيات محددة)
- Middleware أو Checks
أنواع Authorization
1. Role-Based Access Control (RBAC)
- المستخدم له دور
- كل دور له صلاحيات
2. Permission-Based
- كل مستخدم له صلاحيات محددة
3. Attribute-Based (متقدم)
- يعتمد على شروط متعددة
- مثل الوقت أو الموقع
مثال عملي في التفكير
عند بناء API:
Authentication:
- هل هذا المستخدم لديه Token صحيح؟
Authorization:
- هل هذا المستخدم يملك حق الوصول لهذا الـ endpoint؟
أخطاء شائعة
- التحقق من تسجيل الدخول فقط بدون صلاحيات
- وضع منطق Authorization داخل Controller بشكل عشوائي
- عدم فصل Authentication عن Authorization
- الاعتماد على Frontend في التحقق
نصائح احترافية
1. افصل بين المفهومين دائمًا
لا تخلط بين التحقق من الهوية والصلاحيات
2. طبّق Authorization في كل Endpoint
لا تفترض أن المستخدم لديه حق الوصول
3. لا تثق بالـ Frontend
التحقق يجب أن يكون في السيرفر
4. استخدم Middleware
لتنظيم عملية التحقق
5. فكر في الأمان منذ البداية
ولا تضفه لاحقًا
مثال واقعي
نظام تعليمي
طالب:
- يمكنه مشاهدة الدروس
مدرس:
- يمكنه إضافة الدروس
مدير:
- يمكنه إدارة النظام
التطبيق:
- Authentication → تسجيل الدخول
- Authorization → تحديد ماذا يرى كل مستخدم
العلاقة بينهما
يمكنك تخيل العلاقة كالتالي:
- Authentication = بوابة الدخول
- Authorization = تحديد ما يمكنك فعله داخل المكان
هل يمكن وجود أحدهما بدون الآخر؟
Authentication بدون Authorization:
- كل المستخدمين لديهم نفس الصلاحيات ❌
Authorization بدون Authentication:
- لا معنى له (من نحدد صلاحياته؟)
الأسئلة الشائعة (FAQ)
1. ما الفرق بين Authentication و Authorization؟
Authentication للتحقق من الهوية، وAuthorization لتحديد الصلاحيات.
2. هل يمكن استخدام أحدهما بدون الآخر؟
لا، يجب استخدامهما معًا لبناء نظام آمن.
3. أيهما يأتي أولًا؟
Authentication أولًا، ثم Authorization.
4. هل تسجيل الدخول يعتبر Authorization؟
لا، هو Authentication فقط.
5. ما أشهر طريقة لتطبيق Authorization؟
استخدام Roles وPermissions مثل RBAC.
الخاتمة
فهم الفرق بين Authentication و Authorization ليس مجرد معلومة نظرية، بل هو أساس بناء أنظمة آمنة واحترافية.
- Authentication يحدد “من أنت”
- Authorization يحدد “ماذا يمكنك أن تفعل”
والخلط بينهما قد يؤدي إلى مشاكل أمنية خطيرة.
كمطور PHP، عندما تفصل بين المفهومين وتطبقهما بشكل صحيح، ستبني أنظمة:
✔ أكثر أمانًا
✔ أكثر تنظيمًا
✔ وأسهل في التوسع
الأمان يبدأ من الفهم… وليس من الكود فقط.