سؤال

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

وwww.domain.com/activate.php؟key=$generatedKey

وكيف يمكنك إنشاء المفتاح؟ باستخدام SHA1 ($ البريد الإلكتروني) ؟؟

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

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

المحلول

وشخصيا، أنا فقط استخدام مزيج من أشياء مثل:

$generatedKey = sha1(mt_rand(10000,99999).time().$email);

وفرصة الاصطدام صغيرة، ولكن أوصي مراجعة لقاعدة البيانات الخاصة بك أولا قبل إرساله خارج (باستخدام القيود فريدة من نوعها هو وسيلة سهلة).

نصائح أخرى

وأساسا لديك عدد قليل من الخيارات:

1) إنشاء معرف واحد فريد من نوعه على ما يبدو عشوائيا وتخزينها في قاعدة البيانات الخاصة بك مع اسم المستخدم الذي كان مطابقا ل

2) توليد كلمة سر عشوائية وتشمل هوية المستخدم وكلمة المرور في الارتباط وتخزين كلمة المرور في قاعدة البيانات

و3) استخدام وظيفة طريقة واحدة التجزئة (md5، sah1، الخ) ومعرف السري لتشفير معرف المستخدم. لم يكن لديك لتخزين معرف المستخدم مشفرة في قاعدة البيانات الخاصة بك.

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

إذا كنت تسير بالفعل إلى استخدام نوع من قاعدة بيانات لتخزين معلومات المستخدم (وربما كلمة مرور على الأقل) في المستقبل، هل يمكن أن تذهب مع خيار 2. لأنها لا تأخذ الكثير لإضافة عمود آخر إلى حسابك قاعدة البيانات. عند إرسال البريد الإلكتروني، وحفظ اسم المستخدم وشيء من هذا القبيل مفتاح $ = SHA1 (راند (1، 99999). اسم المستخدم $) في عمود آخر للصف الذي يحتوي على اسم المستخدم. ثم نلقي نظرة صلتك مثل هذا: http://you.com/activation.php؟user= اسم المستخدم $ & رئيسيا = مفتاح $. في activation.php أن تحقق لمعرفة ما إذا كان المفتاح يساوي القيمة المخزنة في قاعدة البيانات.

إذا كنت تريد استخدام أقل مساحة التخزين في قاعدة البيانات الخاصة بك، والخيار 3 ستعمل. يمكنك استخدام شيء من هذا القبيل مفتاح $ = SHA1 ($ mysecret. اسم المستخدم $) كمعرف السري. استخدام شيئا غريبا أن فقط كما تعلمون mysecret $ مثل 'aaafj_my_secret_adfaf. استخدام نفس النوع من URL كما هو الحال في الخيار 2. ومع ذلك، لأنك يمكن أن تولد $ مفتاح تستند فقط على اسم المستخدم $، لا تحتاج لتخزينه. حتى عندما كنت معالجة في activation.php، فقط تحقق لمعرفة ما إذا SHA1 ($ mysecret. $ _GET [اسم المستخدم]) == $ _GET [مفتاح]. إذا كان الأمر كذلك، وتعلمون أن لديك المستخدم الصحيح. من الناحية النظرية، مع تسجيل ما يكفي، هل يمكن لشخص معرفة القيمة الخاصة بك لmysecret $ وتوليد مفاتيح التشغيل أيضا. ومع ذلك، كنت بالتأكيد لاحظت مليارات أو أكثر من التسجيلات ان الامر سيستغرق قبل أن يتمكنوا من البدء في حساب ما هو عليه. ويستند عدد التنشيط المطلوبة على حجم المفتاح وظيفة التجزئة. استخدام SHA1 (160 بت) مقابل MD5 (128 بت) لتجعل من الصعب تخمين $ قيمة mysecret الخاص بك.

$guid=md5(uniqid(mt_rand(), true));

إذا كنت تخزين سلسلة التنشيط في قاعدة البيانات والتحقق من ذلك في وقت لاحق، لا تحتاج تجزئة على الإطلاق!

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

وينبغي أن نفعل ذلك، ولكن يمكنك تحسينه عن طريق إضافة بعض الملح، وعلى سبيل المثال:

$key = sha1($email . 'doYouLikeSauce');

والنهج الآخر هو مجرد لتوليد كلمة سر عشوائية وإرسالها عبر البريد الإلكتروني.

$code = md5($_POST['username'] . microtime()); 
scroll top