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

ما الفرق بين المصادقة والصلاحيات؟
يخلط كثيرون بين المفهومين، وفصلهما أول خطوة لتصميم سليم:
المصادقة (Authentication): تجيب عن سؤال «من أنت؟». أي التحقق من هوية المستخدم، بكلمة مرور أو رمز أو بصمة أو حساب خارجي.
التفويض أو الصلاحيات (Authorization): تجيب عن «ماذا يحق لك أن تفعل؟». فالمستخدم المصادق عليه قد لا يحق له رؤية بيانات غيره أو حذف سجلات.
المثال: موظف دخل إلى النظام بهويته، وهذه مصادقة. لكنه لا يستطيع الاطلاع على رواتب زملائه، وهذه صلاحيات.
خطأ شائع: فحص تسجيل الدخول فقط دون فحص ملكية المورد، فيستطيع مستخدم تغيير رقم في العنوان ليرى بيانات مستخدم آخر.
اجعل الفحص في الخادم دائمًا: إخفاء زر في الواجهة ليس حماية، فالمهاجم يرسل الطلب مباشرة.
مبدأ الصلاحيات الأدنى: أعطِ كل مستخدم وكل خدمة أقل ما يحتاجه لعمله، فيقل ضرر أي اختراق.
السجلات: سجّل محاولات الدخول والعمليات الحساسة لتتمكن من التحقيق عند الحاجة.
كيف تحفظ كلمات المرور بشكل صحيح؟
هذه من أهم قواعد الأمان، وتساهل المطورين فيها سبب تسريبات متكررة عالميًا:
لا تخزن كلمة المرور نصًا: إن سُرقت قاعدة البيانات انكشفت كل الحسابات، وكثير من الناس يستعملون الكلمة نفسها في مواقع أخرى.
لا تشفرها بتشفير قابل للعكس: المطلوب دالة تجزئة (Hash) أحادية الاتجاه، فلا يمكن استعادة الكلمة الأصلية منها.
استعمل خوارزميات مخصصة لكلمات المرور: مثل bcrypt أو scrypt أو Argon2، وهي بطيئة عمدًا لتصعّب التخمين. ولا تستعمل MD5 أو SHA-1 أو SHA-256 المباشرة لهذا الغرض. وراجع توصيات الجهات الأمنية المعتمدة للإعدادات الحالية.
الملح (Salt): قيمة عشوائية فريدة لكل مستخدم تضاف قبل التجزئة، لتختلف النتائج للكلمات المتشابهة. وأغلب المكتبات الحديثة تتولاه تلقائيًا.
لا تخترع خوارزميتك: استعمل مكتبة مختبرة مكتملة، فالأخطاء الدقيقة في التشفير قاتلة.
سياسة كلمات المرور: الطول أهم من التعقيد الشكلي. شجع على عبارات مرور طويلة، وامنع الكلمات الشائعة المعروفة، ولا تفرض تغييرًا دوريًا بلا سبب، فهو يدفع الناس لأنماط ضعيفة. وهذه توصيات يتبناها كثير من الجهات، فراجع أحدثها.
لا ترسل كلمة المرور بالبريد: ولا تعرضها، واستعمل روابط إعادة تعيين مؤقتة.
كيف تحافظ على جلسة المستخدم بعد الدخول؟
بعد أن يتحقق الخادم من المستخدم، يجب أن يتذكره في الطلبات التالية دون سؤاله كل مرة. وتوجد طريقتان شائعتان:
الجلسات على الخادم: يخزن الخادم جلسة ويعطي المتصفح معرّفًا عشوائيًا في ملف تعريف ارتباط. وعند كل طلب يبحث عن الجلسة. سهلة الإلغاء والتحكم، وهي مناسبة لكثير من المواقع.
الرموز الموقعة (مثل JWT): يحمل الرمز بيانات موقعة رقميًا يتحقق منها الخادم دون تخزين جلسة. مرنة للواجهات والخدمات الموزعة، لكن إلغاءها قبل انتهائها أصعب، وأخطاء استعمالها شائعة.
اختيار الأنسب: ليس هناك حل لكل الحالات. وكثير من المشاريع التقليدية ترتاح مع الجلسات، فلا تستعمل الرموز لمجرد الموضة.
أمان ملف تعريف الارتباط: فعّل HttpOnly لمنع قراءته بجافاسكربت، وSecure لإرساله عبر HTTPS فقط، وSameSite للحد من هجمات الطلبات العابرة للمواقع.
مدة الصلاحية: اجعلها قصيرة بحسب حساسية التطبيق، مع آلية تجديد آمنة.
تسجيل الخروج الفعلي: يجب أن يبطل الجلسة في الخادم لا أن يحذف الملف عند المتصفح فقط.
لا تخزن الرموز الحساسة في مكان يسهل سرقته: والتخزين المحلي في المتصفح معرض لهجمات حقن السكربت، فاختر موضعًا بحذر.
ما طرق الدخول الأحدث والأقوى؟
كلمة المرور وحدها ضعيفة بطبيعتها، فيُنصح بإضافة طبقات وبدائل:
التحقق بخطوتين (2FA / MFA): عامل إضافي كرمز من تطبيق مصادقة أو مفتاح أمان. يحمي الحساب حتى لو سُرقت كلمة المرور. ويفضل تطبيقات المصادقة أو المفاتيح على الرسائل النصية التي لها مخاطرها.
مفاتيح المرور (Passkeys): تعتمد على التشفير بالمفتاح العام، وتتيح الدخول بالبصمة أو القفل بلا كلمة مرور، وتقاوم التصيد. وهي توجه متنامٍ، فتحقق من دعم منصتك.
الدخول عبر مزودين (OAuth وOpenID Connect): «سجل بحساب جوجل» مثلًا، فيعتمد تطبيقك على مزود هوية موثوق ولا يخزن كلمات مرور. ويحتاج إلى فهم مناسب للبروتوكول لتجنب أخطاء الإعداد.
الدخول بالرابط السحري: رابط مؤقت يرسل إلى البريد. يريح المستخدم لكنه يعتمد على أمان بريده.
خدمات الهوية الجاهزة: مزودون متخصصون يتولون الدخول والاسترداد وغيرهما، فتقلل مخاطر البناء من الصفر. قيّم التكلفة والاعتماد عليهم.
استرداد الحساب: نقطة ضعف شائعة. صممه بعناية بروابط قصيرة الصلاحية وتحقق إضافي للحسابات الحساسة، ولا تجعله أضعف من الدخول نفسه.
الهوية الوطنية والخدمات الحكومية: في بعض الخدمات السعودية يُستعمل تكامل مع منصات هوية رسمية، وشروطه تحددها الجهات المعنية، فارجع إلى وثائقها الرسمية.
كيف تدير الصلاحيات في تطبيقك؟
بعد معرفة المستخدم، يأتي قرار ما يحق له. وهناك أنماط معروفة لتنظيم ذلك:
الأدوار (RBAC): تجمع الصلاحيات في أدوار كمدير ومحرر وزائر، وتعين الدور للمستخدم. بسيطة وكافية لكثير من التطبيقات.
الصلاحيات الدقيقة: تحدد أفعالًا محددة كإنشاء وتعديل وحذف لكل نوع مورد، وتجمعها في أدوار. أكثر مرونة.
الملكية: قاعدة أساسية: المستخدم يرى ويعدل موارده فقط، إلا إذا مُنح غير ذلك. وتحقق منها في كل طلب يمس مورداً.
السياسات المبنية على الخصائص (ABAC): قرارات تبنى على خصائص المستخدم والمورد والسياق، وتناسب القواعد المعقدة.
مركزية الفحص: اجعل منطق الصلاحيات في مكان واحد أو طبقة وسيطة، لا مبعثرًا في كل مسار، فيقل نسيانه.
افتراض المنع: ما لم يُسمح صراحة فهو ممنوع، فالإضافة الجديدة لا تصبح مفتوحة بالخطأ.
اختبر الصلاحيات: اكتب اختبارات تحاول الوصول إلى ما لا يحق، فهي من أنفع اختبارات الأمان.
وثّق الأدوار: جدول واضح بمن يستطيع فعل ماذا، يراجعه أصحاب العمل لا المطورون وحدهم.
ما أشهر الهجمات على نظم الدخول؟
معرفة طرق المهاجمين تعلمك أين تضع الدفاعات. وهذه أشهرها بتوصيف عام:
تخمين كلمات المرور وحشو بيانات الاعتماد: تجربة كلمات شائعة أو بيانات مسربة من مواقع أخرى. ويقابلها تحديد عدد المحاولات وتأخير التكرار وكشف السلوك المشبوه وطلب التحقق الإضافي.
التصيد: صفحة مزيفة تسرق بيانات الدخول. وتقابله مفاتيح المرور والتوعية وتحذير المستخدم من الروابط.
سرقة الجلسة: الحصول على ملف تعريف الارتباط أو الرمز. ويقابله HTTPS وإعدادات الأمان للملفات وتجديد المعرف بعد الدخول.
XSS: حقن سكربت في صفحتك يسرق بيانات المستخدم. ويقابله تعقيم المخرجات وسياسات أمان المحتوى.
CSRF: حمل المتصفح على إرسال طلب باسم المستخدم دون علمه. ويقابله رموز مضادة وSameSite.
كشف وجود الحساب: رسالة «البريد غير مسجل» تفيد المهاجم، فاستعمل رسائل موحدة عند الدخول والاسترداد.
ثغرات إعادة التعيين: رموز قابلة للتخمين أو لا تنتهي. استعمل رموزاً عشوائية طويلة قصيرة العمر تستعمل مرة واحدة.
ثغرات التحكم بالوصول: وهي من أكثر ثغرات التطبيقات شيوعًا بحسب قوائم المخاطر المعروفة مثل OWASP، ويعالج معظمها فحص الملكية والصلاحيات على الخادم. وسنتناول الأمن بتفصيل في مقال خاص.
أسئلة شائعة عن المصادقة والصلاحيات
هل أبني نظام الدخول بنفسي؟
الأفضل في أغلب الحالات استعمال مكتبة أو إطار أو خدمة هوية مختبرة، فالأخطاء الأمنية الدقيقة مكلفة. ابنه بنفسك للتعلم لا للإنتاج إلا بخبرة.
هل JWT أفضل من الجلسات؟
ليس أفضل بإطلاق. لكل منهما استعمال، والجلسات أبسط وأسهل إبطالًا لتطبيقات كثيرة. اختر بحسب بنية مشروعك.
ماذا أفعل لو سُرقت بيانات مستخدميني؟
أبطل الجلسات، واطلب إعادة تعيين كلمات المرور، وأبلغ المستخدمين بوضوح، وراجع الأنظمة واللوائح المعمول بها في بلدك حول الإبلاغ، ومنها نظام حماية البيانات الشخصية في المملكة، عبر الجهات الرسمية.
0 تعليقات