تسجيل الدخول الأعضاء الآمن باستخدام ملفات تعريف الارتباط

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

سؤال

تخزين اسم االمستخدم & كلمه السر من المستخدم في ملف تعريف الارتباط ممارسة جيدة؟ أريد حقًا أن أعرف كيف تحب المواقع الكبيرة (Facebook ، Digg ، Twitter) امسك هذا. الرمز الخاص بي مثل ذلك:

<?php

$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);

?>

بعد كل تسجيل الدخول الناجح أقوم بتخزين $username و ال $password (MD5) في ملف تعريف الارتباط. وتجديد معرف الجلسة مع session_regenerate_id()


ولأصادف المستخدم ، أتحقق مما إذا كانت جلسة تسجيل الدخول موجودة ، وإلا فإنني أؤكد ملفات تعريف الارتباط.

أيه أفكار؟ شكرًا

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

المحلول

أنا مرتبك بعض الشيء - هل تستخدم جلسات PHP أو ملفات تعريف الارتباط؟

إذا قمت بتخزين البيانات في جلسة ($_SESSION['username'] = 'Tom' وما إلى ذلك) ، لا يتم تخزين هذه البيانات في ملف تعريف الارتباط للمستخدم.

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

autologins
----------
key (random hash)
user_id
expires

نصائح أخرى

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

تحرير: راجع للشغل ، هل قمت بتخزين كلمة المرور العادية أو المشفرة؟ يمكن أن يكون ذلك مخاطرة أمنية أكبر.

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

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

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

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

أظن أن Twitter يستخدم شيئًا كهذا ، وهذا هو السبب في أنه لا يمكنك تسجيل الدخول بشكل دائم إلى Twitter من جهاز كمبيوتر واحد في وقت واحد.

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