• 0

ما هي آلية عمل صفحة "إستعادة كلمة المرور"؟

السلام عليكم

كنت أتساءل عن آلية عمل صفحة "إستعادة كلمة المرور" الموجودة في الأغلب المواقع

حيث في الغالب يقوم المستخدم بإدخال البريد الإلكتروني بعدها يتلق رسالة تحتوي على رابط لإعادة تعيين كلمة المرور كالتالي

http://examle.com?token=[string]

حيث يكون الرابط يحتوي على token للتأكد من هوية المستخدم

هل يتم تخزين token إستعادة لكل كمستخدم في قاعدة البيانات؟ -مع العلم أن في الأغلب ال token يتغير مع كل رسالة إستعادة للبريد الإلكتروني- هل يتم إذن تحديث ال token في قاعدة البيانات كل مرة يطلب فيها المستخدم إستعادة كلمة مروره؟

وإذا كان كذلك فما هي الدوال التي يمكن استخدامها لتوليد هذا ال token؟

هل يوجد طرق أخرى لعمل هذه الصفحة؟ وإذا كان كذلك فما هي أفضل الطرق؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

1- في الغالب الأعم يتم تخزين token الاستعادة في قاعدة البيانات لكل مستخدم يطلب إعادة تعيين كلمة المرور الخاصة به. وهناك حالتين للتخزين. فإمّا أن يكون ضمن نفس جدول المستخدمين عن طريق حقل إضافي. أو أن يكون ضمن جدول منفصل مرتبط بجدول المستخدمين، والحالة الأولى هي الأبسط بالطبع.

2- يتم تحديث الـ token ضمن قاعدة البيانات في كل مرة يطلب فيها المستخدم استعادة كلمة مروره.

3- بالنسبة للدوال التي تولّد مثل هذا الـ token فيعود ذلك إلى لغة البرمجة المستخدمة، أو إلى قاعدة البيانات المستخدمة في حال أردت استخدام Stored Procedure مثلًا.

4- لا أتصور أنّك قد تحتاج إلى طرق أخرى لفعل ذلك إلّا إذا كان لديك سبب وجيه. 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

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

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

شكرا على الإجابة

بتاريخ 4 ساعات قال حسام برهان:

3- بالنسبة للدوال التي تولّد مثل هذا الـ token فيعود ذلك إلى لغة البرمجة المستخدمة، أو إلى قاعدة البيانات المستخدمة في حال أردت استخدام Stored Procedure مثلًا.

ما هي أمثلة الدوال التي يمكن استخدامها مع لغة c# وقواعد بيانات Sql server؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

يمكنك استخدام التابع Guid.NewGuid().

انظر كمثال على ذلك في سي شارب:

// This code example demonstrates the Guid.NewGuid() method.

using System;

class Sample 
{
    public static void Main() 
    {
    Guid g;
// Create and display the value of two GUIDs.
    g = Guid.NewGuid();
    Console.WriteLine(g);
    Console.WriteLine(Guid.NewGuid());
    }
}

/*
This code example produces the following results:

0f8fad5b-d9cb-469f-a165-70867728950e
7c9e6679-7425-40de-944b-e07fc1f90ae7

*/

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

كنت أفكر في البداية استخدام MD5 لتوليد hash للمستخدم لكن المشكلة أن الناتج يكون طويلا

وكذلك فإن Guid بها نفس المشكلة حيث أن الناتج طويل (32 byte) لذا سألت عن أمثلة مختلفة للدوال لأني أفضل شيئا كالتالي

GforzL3Swzrbjc5xHP_m
5sYiXTMwvypFZw47_Wj2

أو إن كنت حضرتك تعرف دالة تمكنني من التحكم في طول الناتج؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

مسا الخير أخي انا منذ يومين عملت نظام استعادة كلمة المرور بلغة البرمجة PHP وهو أمر سهل :

أول عند وضع البريد الإلكتروني في حقل إستعادة كلمة المرور قم بالتأكد إذ كان البريد الإلكتروني موجود

بعدها قم بتشكيل key جديد عن طريق التوابع التالية :

$key = bin2hex(openssl_random_pseudo_bytes(16));

هذه تقوم بتوليد أكواد عشوائية كل مرة .

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

مثال على الرابط:

www.example.com/reset_pass.php?key=8f7937dhy38d3

صفحة عال reset_pass.php

لا يمكن الدخول لهلا إلا اذا يحتوى الرابط على key 

قم بالحصول على ال key من الدالة $_GET["key"]

وتأكد اذا كان هذا ال key هو نفسة الذي قمت بتخزينه في قاعدة البيانات

اذا كان نفسه قم بعررض حقلين لكتابة كلمة مرور جديدة 

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

 

هذا ما أفعلة في برنامجي وشكرا لك.

أي استفسار أنا موجود في الخدمة وشكرا .

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

وعليكم السلام ورحمة الله

بالنسبة لمطوري ASP.NET فالعملية مطبقة ضمن ASP.NET Identity، انت بحاجة فقط لتعريف خدمة البريد الإلكتروني (Email Service)

http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-and-password-reset

 

في هذا الرابط درس ممتاز لألية استعادة كلمة المرور والـتأكيد على عنوان البريد الإلكتروني.

 

بالنسبة لحجم الـ Token لا أرى أي أهمية لأن يكون قصيرأ، على العكس طوله يضمن حماية اعلى.

 

بالتوفيق.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن