سؤال

ممكن مكررة:
نسيت كلمة المرور: ما هي أفضل طريقة لتنفيذ وظيفة Forgot Password؟

أنا برمجة موقع مجتمع.

أريد إنشاء ميزة "نسيت كلمة المرور".

بالنظر حولها في مواقع مختلفة، وجدت أنها توظف واحدة من ثلاثة خيارات:

  1. أرسل المستخدم البريد الإلكتروني مع رابط إلى عنوان URL فريد من نوعه التي تسمح له بتغيير كلمة المرور (Gmail و Amazon)

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

  3. ارسل للمستخدم كلمة مروره الحالية (www.teach12.com)

الخيار رقم 3. يبدو أن أكثر ملاءمة للمستخدم ولكن منذ أن أحفظ كلمات المرور كهزم MD5، لا أرى كيف سيكون خيار # 3 متاحا لي منذ ذلك الحين MD5 لا رجعة فيه. وبعد هذا يبدو أيضا أنه غير آمن الخيار لأنه يعني أنه يجب أن يوفر موقع الويب كلمة المرور في نص واضح في مكان ما، وعلى الأقل إرسال كلمة مرور النص الواضحة عبر البريد الإلكتروني غير الآمن للمستخدم. أم أنني أفتقد شيئا هنا؟

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

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

ما هي التجربة التي كنت قد استخدمتها / برمجة هذه الخيارات المختلفة؟ هل هناك أي خيارات فاتني؟

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

المحلول

4) إضافة حساب مصرفي مع اثنين من المبالغ العشوائية واطلب منهم إدخال تلك الموجودة في.
5) الحلزون البريد لهم بعض كلمة المرور الجديدة واطلب منهم إدخالها في.
6) هل لديك نص أو اتصل ببعض الأرقام وأدخل بعض القيمة برقم هاتف به الهاتف المحمول المسجلين في الملف.
7) اخرج من مشكلة إدارة كلمة المرور تماما عن طريق الاستعانة بمصادر خارجية إلى مزودي إفرازات مثل تجاوزات المكدس، ومحركات الفيسبوك، ومحركات المدونة، والبعض الآخر بدأ القيام به.

خارج هؤلاء، استخدم الخيار رقم 1 أو رقم 2 مع الميزة المضافة التي تنتهي صلاحيتها في ساعة واحدة.

نصائح أخرى

لقد صدمت في رفع الدفاع عن الإجابات التي تصف # 1 و # 2 ككافئ. أنها ليست على الإطلاق. إرسال المستخدم رابط قصير الأجل لتغيير كلمة المرور الخاصة بهم هو النهج الأكثر ملاءمة، والأكثر شيوعا يستخدم والأمان الذي لا ينطوي على تفاعل خارج الفرقة (البريد، النص MSG، إلخ). بعض الأسباب:

  1. يتيح تعيين كلمة مرور مؤقتة عبر رابط كلمة مرور Forge للمستخدمين تغيير كلمة مرور المستخدم بشكل فعال وقفل مستخدم خارج حسابهم إذا كان يعرفون تسجيل دخول المستخدم. مع رابط، يعرف المستخدم ببساطة أن شخصا ما العبث ولا يتأثر وصولهم.
  2. يرتبط رابط إعادة تعيين كلمة المرور صالحا فقط لفترة قصيرة، لذلك هناك نافذة صغيرة جدا لمهاجمة لضربها. وحتى لو فعلوا ذلك، سيعرف المستخدم لأن رابط إعادة التعيين لم يعد يعمل إذا اعترض المهاجم الرابط واستخدامه لتغيير كلمة المرور. إذا لم يتم تغيير كلمة المرور الجديدة المعينة من قبل المستخدم على الفور، المهاجم الذي اعترض كلمة المرور يمكن أن ينتشر بهدوء المستخدم إلى أجل غير مسمى. وبعد لذلك الفرق الكبير هو، في حين أن القراصنة يمكنه اعتراض البريد الإلكتروني رابط إعادة تعيين كلمة المرور، إذا استخدموا الرابط لتغيير كلمة مرور المستخدم، فسيعرف المستخدم شيئا خطأ لأن الرابط لن يعمل وسيقوم بإنشاء طلب إعادة تعيين كلمة مرور أخرى.
  3. أسهل في الاستخدام - المستخدم ببساطة النقر فوق ارتباط في بريده الإلكتروني بدلا من كتابة كلمة مرور عشوائية جديدة قمت بإنشائها.

وغالبا ما تجعل الأسئلة الأمنية موقعا أقل أمانا، وليس أكثر - فهي ناقلات هجوم آخر وفي كثير من الأحيان أضعف رابط. أوصي بشدة القراءة كتيب Hacker Application Web لمناقشة ممتازة حول هذا الموضوع.

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

وإلا يمكن أن أزعجك عن طريق إصدار كلمة مرور عشوائية جديدة مرارا وتكرارا - إذا لم تكن بالقرب من بريدك الإلكتروني، فقد لا تعرف السبب في عدم التعرف على كلمة مرورك العادية.

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

خيارات 1 و 2 باعتبارها غير آمنة مثل بعضها البعض.

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

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

إذا نسوا السؤال وأنت شركة "حقيقية"، فهناك دائما خيار إرسال مستخدم رمزي من خلال المنشور، مع تعليمات حول كيفية إعادة تعيين جميع أمنهم ... من غير المرجح أن يكون للمتسلل الوصول إليه إلى بريد الحياة الحقيقي.

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

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

لا يوجد فرق حقيقي بين أمان الخيار 1 أو 2. الخيار 1 هو نفس التحميل المسبق كلمة المرور الجديدة في النموذج.

في الواقع، مع انتشار هجمات الخداع، يمكن للمرء أن يجادل بأن الاستخدام المشجيع للخيار 1 مع عناوين URL طويلة قد يجعل الناس أقل تنبيه حول النقر فوق عناوين URL الطويلة الغامضة.

إقرأ ال owasp العشرة الأولى للتأكد من أن طريقتك متوافقة.

هنا هو الرابط المباشر.

مجرد ملاحظة سريعة حول شيء غير محدد فيما يتعلق بسؤالك. لقد ذكرت أنك استخدمت MD5 إلى كلمات المرور المخزنة. بغض النظر عما إذا كنت تختار استخدام الخيارات 1 أو 2 (3 ستكون أقل أمانا، لأسباب واضحة)، MD5 هي خوارزمية التجزئة المتشققة، ويمكن أن تجعلها سهلة إلى حد ما للمتسللين للوصول إلى الحسابات المحمية MD5 التجزئة.

يمكنك قراءة المزيد حول مشكلة عدم الحصانة في عنوان URL التالي: en.wikipedia.org/wiki/md5

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

الخيار رقم 1 ربما هو الأفضل. # 3 غير آمن (وأقترح أيضا استخدام شيء أقوى من MD5، مثل SHA1). الخيار رقم 2 غير جيد لأنه يسمح لأي شخص عشوائي بإغلاقك من حسابك حتى تقوم بفحص بريدك الإلكتروني، إلا إذا كنت تستخدم سؤالا أمانا. والأسئلة الأمنية غالبا ما تكون أسهل في الكراك من كلمات المرور.

الخيار رقم 1 لديه اثنين من المزايا الرئيسية أكثر من # 2. إذا كانت هناك أنواع مستخدمين عشوائية في عنوان بريدي الإلكتروني في المربع "لقد نسيت كلمة المرور"، فلن تتم إعادة تعيين كلمة المرور الخاصة بي. أيضا، هو أكثر أمانا قليلا في أنه لا يوجد سجل دائم كلمة مرور الموقع المخزنة في صندوق الوارد الخاص ب Gmail إلى الأبد.

قطعة مفقودة حاسمة هنا هي أن الرابط الذي تقدمه في # 1 يجب أن تعمل فقط لإعادة تعيين كلمة مرور واحدة ولديها مهلة زمنية

تعني كل هذه الحلول أنك تعالج صندوق البريد الإلكتروني الخاص بك ك "حلقة واحدة" تحكم كلها جميعا. يبدو أن معظم الخدمات عبر الإنترنت تقوم بذلك الآن أيام.

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

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

الخيار 5: استخدام openid. وتمرير المسؤولية إلى طرف ثالث للقلق بشأن ذلك.

بصراحة على الرغم من أن هذا هو أكثر بكثير من معظم المواقع تتطلب. أنا من أجل واحد مثل تلقي كلمات مرور نصية النصية عن طريق البريد الإلكتروني لأنني قمت بتخزينها في مجلد "التسجيلات" في صندوق الوارد الخاص بي. وبهذه الطريقة يمكنني البحث عن كلمات المرور للمواقع عندما أنسىهم (والتي تحدث كثيرا!). إذا كان شخص ما يقرأ بريدي الإلكتروني لدي مشاكل أكبر بالقلق من الأشخاص الذين يستخدمون حساب Twitter الخاص بي (إذا كان لدي واحدة). بالطبع البنوك والشركات لديها متطلبات أقوى ولكنك لم تحدد ما هو موقعك. هذا هو مفتاح أفضل إجابة.

وأنا أتفق مع تعليقاتك حول الخيار رقم 3 غير آمن.

أما بالنسبة للبرمجة إما رقم 1 أو # 2، فإن الخيار رقم 2 هو أسهل في البرنامج ولكن # 1 ليس أصعب بكثير وكلاهما على الأرجح بشكل آمن مثل بعضها البعض.

أيهما خيار تختاره، يمكنك أيضا التفكير في جعلها أكثر أمانا من خلال تضمين طلبات المعلومات الشخصية (التي تحصل عليها أثناء التسجيل) كجزء من عملية كلمة المرور المنسية.

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

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

من الواضح أن أكثر من ذلك، كلما زاد عدد البرمجة.

أبسط طريقة هي:

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

إما الخيار 1 أو 2 سيكون على ما يرام. كما قلت، الخيار 3 غير آمن كما تحتاج إلى تخزين كلمة مرور النص الواضحة. ربما يمكنك الحصول على خوارزمية تشفير عكسية واستخدامها لتخزين / استرجاع كلمة المرور، ولكن مع وجود بدائل أفضل متاحة لك لا يوجد سبب للنزول في هذا الطريق.

هناك خيار إضافي يمكنك استخدامه بالاشتراك مع أي من الخيارات التي ذكرتها:

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

نظرا لأن التذكير ليس كلمة المرور نفسها، فمن الآمن إرسال بريد إلكتروني (أو ربما حتى عرض مباشرة على الصفحة).

إذا كنت تجزئة لهم الخيار 3 غير متاح وإذا كنت لا تجذبهم، فأنا عار عليك. :)

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

هل يمكن أن تصنع مزيجا بين # 1 و # 2، مع أخذ مزايا من كليهما:

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

يمكن أن تكون تلك الصفحة SSL، ويمكن أن تنتهي صلاحية كلمة المرور في 12-24 ساعة.

لقد جربت بضع طرق لم أكن سعيدا حقا بها. ما استقرت إليه للمشروع التالي هو:

  1. يدخل المستخدم اسم المستخدم وعنوان البريد الإلكتروني
  2. البريد الإلكتروني المرسلة مع رابط يحتوي على عنوان URL و GUID PALL قد تم تخزينه في DB مع انتهاء صلاحية 48 ساعة
  3. المستخدم يؤكد إعادة تعيين كلمة المرور
  4. كلمة المرور الجديدة عبر البريد الإلكتروني للمستخدم
  5. تسجيل الدخول باستخدام كلمة مرور جديدة يعرض رسالة أو إعادة توجيهات لتغيير صفحة كلمة المرور.

إرشاد المستخدم يأتي شخصيا إلى مكاتبك وإثبات هويتها باستخدام بطاقة الهوية أو جواز السفر.

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

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