اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

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

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

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

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

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

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

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

Recommended Posts

  • 1
نشر

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

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

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

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

  • 0
نشر

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

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

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

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

  • 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

*/

 

  • 0
نشر

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

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

GforzL3Swzrbjc5xHP_m
5sYiXTMwvypFZw47_Wj2

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

  • 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 من قاعدة البيانات لتجنت استخددامه مرة أخرى.

 

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

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

  • 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 لا أرى أي أهمية لأن يكون قصيرأ، على العكس طوله يضمن حماية اعلى.

 

بالتوفيق.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...