security شرح الفرق - هل يجب علي تجزئة كلمة المرور قبل إرسالها إلى جانب الخادم؟




6 Answers

هذا سؤال قديم ، لكنني شعرت بالحاجة إلى تقديم رأيي حول هذه المسألة الهامة. هناك الكثير من المعلومات المضللة هنا

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

أعتقد أنه لا ينبغي أبداً الاحتفاظ بكلمات المرور (ناهيك عن نقلها) بنص عادي. هذا يعني عدم الاحتفاظ بها على القرص ، أو حتى في الذاكرة.

يبدو أن الناس الذين يستجيبون هنا يعتقدون أن HTTPS هي رصاصة فضية ، وهي ليست كذلك. بالتأكيد يساعد بشكل كبير ومع ذلك ، ويجب استخدامه في أي جلسة موثقة.

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

لذلك لدينا مفتاح. الآن نحن بحاجة إلى تنظيف أي أثر لكلمة المرور على جهاز العملاء.

بعد ذلك ، نحتاج إلى الحصول على هذا المفتاح لأنظمتك. يجب ألا تقوم أبداً بإرسال مفتاح أو كلمة مرور "بشكل واضح". ليس حتى عبر HTTPS. HTTPS غير قابل للاختراق. في الواقع ، يمكن للعديد من المنظمات أن تصبح مؤسسة MITM موثوق بها - وليس من منظور هجوم ، ولكن لإجراء عمليات تفتيش على حركة المرور لتنفيذ سياساتها الأمنية الخاصة. هذا يضعف HTTPS ، وهي ليست الطريقة الوحيدة التي يحدث بها (مثل عمليات إعادة التوجيه إلى هجمات HTTP MITM على سبيل المثال). لا تفترض أبدا أنها آمنة.

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

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

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

TL، DR:

استخدم HTTPS. تجزئة كلمات المرور بشكل آمن ، بشكل لا رجعة فيه ، مع ملح فريد لكل كلمة مرور. افعل ذلك على العميل - لا تنقل كلمة المرور الفعلية الخاصة به. لا يعد إرسال كلمة المرور الأصلية للمستخدمين إلى الخوادم "OK" أو "Fine" أبدًا. تنظيف أي أثر من كلمة المرور الأصلية. استخدم إشارة غير بصرية بصرف النظر عن HTTP / HTTPS. إنه أكثر أمانًا على العديد من المستويات. (أجب على OP).

بين والعميل

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




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

بيت القصيد من كلمات السر هو إضافة طبقة إضافية من الأمن. إذا كان المهاجم قادرًا على الحصول على التجزئة والملح من قاعدة البيانات باستخدام SQL Injection أو نسخة احتياطية غير آمنة ، فعليه العثور على النص العادي عن طريق فرضه. يستخدم John The Ripper عادةً لتحطيم تجزئة كلمات المرور المملحة.

لا يُعد استخدام https انتهاكًا لطبقة النقل العاشرة في AW-A-A-AWASP

تحرير: إذا كنت في sha256(client_salt+plain_text_password) حساب sha256(client_salt+plain_text_password) ثم حساب تجزئة آخر على sha256(server_salt+client_hash) جانب الملقم sha256(server_salt+client_hash) ثم هذا ليس مشكلة خطيرة. ومع ذلك ، فإنه لا يزال عرضة للتنصت وإعادة الطلب. وبالتالي لا يزال هذا انتهاك واضح لـ WASP A9. ومع ذلك ، لا يزال هذا يستخدم ملخص الرسالة كطبقة أمان.

أقرب شيء رأيت لاستبدال جانب العميل ل https هو diffie-hellman في تبادل المفتاح في javascript . ومع ذلك ، فإن هذا يمنع هجمات MITM النشطة ، وبالتالي فإن التقنية تعتبر انتهاكًا لـ OWASP A9. يتفق مؤلفو الكود على أن هذا ليس بديلاً كاملاً لـ HTTPS ، على الرغم من أنه أفضل من لا شيء وأفضل من نظام تجزئة جانب العميل.




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

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

لحل هذه المشكلة يمكنك بالطبع تجزئة التجزئة التي يتلقاها الخادم ويطلق عليها اليوم.

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




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

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




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




ليس استبدال SSL / TLS للنطاق غير اليدوي؟ لا أرى قيمة مضافة لهذا لأن SSL / TLS يحمي أيضًا من هجمات إعادة التشغيل.

المرجع. https://en.wikipedia.org/wiki/Cryptographic_nonce




Related