نظام تسجيل الدخول PHP باستخدام ملفات تعريف الارتباط والتجزئة المملحة

StackOverflow https://stackoverflow.com/questions/401985

  •  03-07-2019
  •  | 
  •  

سؤال

أقوم بتطوير نظام تسجيل دخول يعتمد على PHP.كل مستخدم لديه معرف (رقم) وكلمة مرور، والتي يتم تخزينها كتجزئة مملحة.

أنا قادر على معرفة ما إذا كانت عملية تسجيل الدخول ناجحة أم لا، ولكنني الآن بحاجة إلى تخزين هذه المعلومات في مكان ما (بحيث لا يتم تسجيل خروج المستخدم نهائيًا).

في الماضي، كنت ألعب بمتغيرات $_SESSION.ومع ذلك، يبدو أنه يتم حذفها عندما يغادر المستخدم المتصفح، وهو أمر غير مرغوب فيه.كما لا أستطيع "افتراض" أن المستخدم لن يحاول خداع النظام، لذلك يجب أن يكون آمنًا.

إذا هذه هي اسئلتي:

  1. هل ينبغي أن أستخدم $_SESSION أو $_COOKIE؟ما هي المزايا الرئيسية لكل من هذه الأساليب؟
  2. كيفية تنفيذ مربع الاختيار "تذكرني"؟
  3. ما هي المعلومات التي يجب تخزينها في متغير الجلسة/ملف تعريف الارتباط؟

لاحظ أنه لم يتم أخذ أي مشكلات تتعلق بأمان قاعدة البيانات في الاعتبار في هذا السؤال بالتحديد.

أما بالنسبة للرقم 3، فما أعنيه بالضبط هو:

  • هل يجب أن أقوم بتخزين المعرف وكلمة المرور المجزأة للمستخدم في ملف تعريف الارتباط/الجلسة، أو
  • هل يجب أن أقوم بتخزين المعرف وكلمة المرور غير المجزأة للمستخدم في ملف تعريف الارتباط/الجلسة، أو
  • هل يجب أن أقوم بتخزين "معرف الجلسة" وكلمة المرور (مجزأة أم غير مجزأة؟) أو
  • هل يجب أن أقوم بتخزين "معرف الجلسة" و"المعرف" وكلمة المرور (مرة أخرى، مجزأة أم غير مجزأة)؟

أريد أن أحافظ على موقع الويب الخاص بي آمنًا وفعالًا وسهل الاستخدام قدر الإمكان.إذا تم اتباع نهج يستند إلى SessionID، سأكون ممتنًا أيضًا للحصول على بعض التوضيحات بشأن كيفية تخزينه في قاعدة البيانات.

شكرا لكم مقدما

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

هل كانت مفيدة؟

المحلول

أريد أن أكرر وجهة نظر إيران أبداً قم بتخزين كلمة مرور المستخدمين أو حتى تجزئة كلمة المرور في بيانات الجلسة أو ملف تعريف الارتباط.

بشكل عام، قمت بتنفيذ وظيفة تذكرني في تطبيقات الويب باستخدام ملفات تعريف الارتباط.هذا مكان جيد للبدء للحصول على معلومات حول إنشاء نظام تسجيل دخول مستمر "آمن". مشاركة مدونة على حوض السمك.تمت تغطية الإجابة المتعمقة بالفعل إجابة Stack Overflow أخرى.

إذا كنت تريد التأكد من أن تسجيل الدخول آمن، فيجب عليك استخدام https.وذلك لأنه يمكن سرقة ملفات تعريف الارتباط أو الجلسات إذا لم يتم تشفيرها.

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

نصائح أخرى

بالنسبة للمعلومات الحساسة (أي نتائج المصادقة)، استخدم الجلسات فقط.يتم تخزين الجلسات من جانب الخادم وتكون أقل عرضة للاختراق.

فيما يتعلق بمدة الجلسة، فإن الإعداد الافتراضي هو مدة جلسة المتصفح - ولكن يمكنك التحكم في ذلك.هناك العديد من الإعدادات التي تؤثر على ذلك:

session.gc_maxlifetime - يتحكم بشكل فعال في عمر الجلسة.

تحدد session.gc_probability وsession.gc_divisor معًا عدد مرات إجراء عملية تجميع البيانات المهملة للجلسة.

وأخيرًا - يتحكم session.cookie_lifetime في عمر ملف تعريف ارتباط الجلسة (ملف تعريف الارتباط الذي يحمل معرف الجلسة بحيث لا يلزم نقله عبر عنوان URL).يجب أن يتطابق مع قيمة session.gc_maxlifetime.

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

قم بتخزين المعرف في $_SESSION ولكن لا تقم بتخزين كلمة المرور المجزأة أو غير المجزأة.بمجرد قيام المستخدم بتسجيل الدخول وحفظ المعرف في $_SESSION، فلن تحتاج إلى كلمة المرور بعد الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top