[Security] هل يجب علي تجزئة كلمة المرور قبل إرسالها إلى جانب الخادم؟


Answers

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

Question

لاحظت أن معظم المواقع ترسل كلمات المرور كنص عادي عبر HTTPS إلى الخادم. هل هناك أي ميزة إذا بدلاً من ذلك أرسلت تجزئة كلمة المرور إلى الخادم؟ هل سيكون أكثر أمنا؟




استخدام HTTP Digest - أنه يؤمن كلمة المرور حتى على http (ولكن أفضل استخدام سيكون http http digest عبر https)

ويكيبيديا:

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

الرابط: http://en.wikipedia.org/wiki/Digest_access_authentication

إذا كنت تريد أن ترى استخدام "الحياة الحقيقية" ، يمكنك أن تبحث في phpMyID - موفر PHP openid الذي يستخدم مصادقة هضم http http://siege.org/phpmyid.php

.. أو يمكنك البدء من عينات php auth في http://php.net/manual/en/features.http-auth.php

Http digest rfc: http://www.faqs.org/rfcs/rfc2617

من اختباراتي تدعم جميع المتصفحات الحديثة ذلك ...




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

باستخدام HTTPS ، تمنع أحد المتسللين من الحصول على كلمة المرور من مصدر واحد ، نظرًا لأن HTTPS يستخدم قناتين ، كلاهما مشفر.




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




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

قم بكليهما

افعل كلاهما للأسباب التالية:

  1. يساعد الفرز على الركوب على تغطية نقاط الضعف في النقل ، إذا تم اختراق اتصال SSL ، فلا يزال يتعذر عليه رؤية كلمة المرور الأولية. لا يهم من حيث القدرة على انتحال شخصية المستخدمين المصرح لهم ، ولكنه سيحمي المستخدمين من قراءة كلمات المرور الخاصة بهم معًا مع بريدهم الإلكتروني. لا يتبع معظم الأشخاص أفضل الممارسات ويستخدمون كلمة المرور نفسها للعديد من حساباتهم ، لذا يمكن أن يشكل هذا نقطة ضعف خطيرة بالنسبة لزوارك.

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

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

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






Links