كيفية التعامل مع رموز المصادقة بأمان

أفضل الممارسات لإدارة رموز المصادقة (الوصول والتحديث) بشكل آمن عبر أنواع التطبيقات المختلفة (الويب، الهاتف المحمول، جانب الخادم)، بما في ذلك التخزين والنقل والانتهاء والإلغاء.

Intermediate

يعد التعامل مع رموز المصادقة بأمان أمرًا بالغ الأهمية لأمن التطبيقات. غالبًا ما يعتمد النهج الأفضل على نوع التطبيق (ويب، جوال، جانب الخادم) والرمز المحدد المستخدم (رمز الوصول، رمز التحديث).

فيما يلي المبادئ العامة وأفضل الممارسات للتعامل مع رموز المصادقة بأمان:

المبادئ العامة

  • حافظ على سريتها وأمنها: تعامل مع الرموز كما تتعامل مع أي بيانات اعتماد حساسة أخرى. يجب ألا يتم الكشف عن مفتاح التوقيع الخاص بالرموز إلا للخدمات التي تتطلبه.
  • استخدم بروتوكول HTTPS: انقل الرموز دائمًا عبر اتصالات HTTPS آمنة لمنع اعتراضها.
  • قلل البيانات الحساسة في الحمولة: لا تقم بتضمين بيانات المستخدم الحساسة في حمولة الرمز، حيث يمكن فك تشفير الرموز بسهولة، حتى لو كانت موقعة.
  • أوقات انتهاء صلاحية قصيرة: قم بتعيين أوقات انتهاء صلاحية قصيرة لرموز الوصول (من دقائق إلى ساعات) للحد من فرص المهاجمين في حالة تعرض الرمز للاختراق.
  • تجنب الترميز الثابت: لا تقم أبدًا بترميز الرموز بشكل ثابت أو تخزينها في نص عادي داخل التطبيق.

تخزين الرموز حسب نوع التطبيق

1. تطبيقات الويب

  • التخزين في الذاكرة (لرموز الوصول في تطبيقات SPA): يعتبر تخزين رموز الوصول في ذاكرة المتصفح خيارًا آمنًا، لأنه يقلل من المخاطر المرتبطة بتخزين نظام الملفات. يمكن تحقيق ذلك باستخدام إغلاق JavaScript أو Web Workers، التي تعمل في نطاق عالمي منفصل. ومع ذلك، يتم فقدان الرموز المخزنة في الذاكرة عند تحديث الصفحة أو عند إغلاق علامة التبويب.
  • ملفات تعريف الارتباط الآمنة HttpOnly (لرموز التحديث وتطبيقات الويب التقليدية):
    • بالنسبة لرموز التحديث، استخدم ملفات تعريف الارتباط الآمنة HttpOnly مع سمة SameSite (Lax أو Strict). لا يمكن الوصول إلى ملفات تعريف الارتباط HttpOnly عبر JavaScript من جانب العميل، مما يقلل من نواقل هجمات XSS.
    • بالنسبة لتطبيقات الويب التقليدية التي يتم عرضها بواسطة الخادم، يوصى بتخزين الرموز المميزة على الخادم لتحقيق أقصى درجات الأمان. إذا كان التخزين من جانب العميل ضروريًا، فاستخدم ملفات تعريف الارتباط المشفرة للجلسة.
  • تجنب التخزين المحلي وتخزين الجلسة: لا تقم بتخزين الرموز الحساسة في localStorage أو sessionStorage لأنها عرضة لهجمات Cross-Site Scripting (XSS).

2. تطبيقات الأجهزة المحمولة (iOS و Android)

  • التخزين الآمن الخاص بالمنصة: استخدم آليات التخزين الآمنة لنظام التشغيل.
    • iOS: استخدم Keychain.
    • Android: استخدم KeyStore أو البيانات الداخلية لـ Android.
    • تم تصميم هذه الآليات لحماية البيانات الحساسة وحماية الرموز المميزة من التطبيقات الأخرى على الجهاز.

3. التطبيقات من جانب الخادم

  • التخزين من جانب الخادم: بالنسبة للتطبيقات التي يقوم فيها الخادم الخلفي بإجراء مكالمات API، يجب تخزين الرموز المميزة على الخادم. يوفر هذا أعلى مستوى من الأمان حيث لا يتم الكشف عن الرموز المميزة للعميل.
  • التخزين المشفر: إذا كان لا بد من الاحتفاظ بالرموز المميزة، فقم بتشفيرها في قاعدة البيانات أو نظام الملفات.

أفضل الممارسات لإدارة الرموز المميزة

  • رموز التحديث: استخدم رموز التحديث للحصول على رموز وصول جديدة قصيرة الأجل دون الحاجة إلى إعادة المصادقة بشكل متكرر. يجب أن تكون رموز التحديث طويلة الأمد ومخزنة بشكل آمن (مثل ملفات تعريف الارتباط HttpOnly) ويفضل أن يتم تدويرها بعد الاستخدام.
  • إلغاء الرموز: قم بتنفيذ استراتيجية لإلغاء الرموز، خاصة رموز التحديث، في حالات الاختراق أو تسجيل خروج المستخدم.
  • الحد الأدنى من المطالبات: قم بتضمين الحد الأدنى الضروري من المطالبات في حمولة الرمز من أجل الأداء والأمان.
  • انحراف الساعة: عند التحقق من صحة المطالبات المستندة إلى الوقت (مثل انتهاء الصلاحية)، ضع في اعتبارك السماح بانحراف بسيط في الساعة (بضع ثوانٍ) لمراعاة الاختلافات الطفيفة في الوقت بين الخوادم.
  • نمط الخلفية للواجهة الأمامية (BFF): بالنسبة لتطبيقات الصفحة الواحدة (SPAs)، ضع في اعتبارك استخدام نمط الخلفية للواجهة الأمامية (BFF) حيث تتولى الخلفية الحصول على الرموز وتخزينها، وتعمل كوسيط آمن بين تطبيق الصفحة الواحدة وخادم المصادقة.