كيفية إرسال كلمة المرور بشكل آمن عبر HTTP باستخدام Javascript في غياب HTTPS؟

StackOverflow https://stackoverflow.com/questions/2003262

سؤال

المشكلة الأساسية التي يواجهها جميع المطورين:عندما يقوم المستخدم بإرسال النموذج، يتم إرسال كلمة المرور عبر الشبكة ويجب حمايتها.الموقع الذي أقوم بتطويره لا يحتوي على HTTPS.لا يرغب المالك في شراء شهادة SSL، ولا يرغب في الحصول على شهادة موقعة ذاتيًا.لذلك أريد حماية كلمة المرور المرسلة عبر HTTP باستخدام Javascript عند إرسال النموذج.

إلى الناخبين المتحمسين: كيفية إرسال كلمة المرور بشكل آمن عبر HTTP؟ لا يعطي أي حل معقول وأنا في وضع آخر.

إذا استخدمت MD5، فيمكن عكس سلسلة كلمة المرور هذه.ماذا عن نونس/HMAC؟أي مكتبة جافا سكريبت المتاحة لذلك؟أو هل لديك أي اقتراح/تلميح لمعالجة؟شكرا لك مقدما!

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

المحلول

لا توجد طريقة لإرسال كلمة المرور بشكل آمن التي يمكن للمستخدم التحقق منها بدون SSL.

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

إذا كنت تريد أن تكون كلمات المرور آمنة من هجمات الوسيط، فيجب عليك شراء شهادة SSL.لا توجد وسيلة أخرى.اعتد عليه.

إذا استخدمت MD5، فيمكن عكس سلسلة كلمة المرور تلك.

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

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

نصائح أخرى

الحل هنا هو عدم إرسال كلمة المرور على الإطلاق. استخدام التحدي / الاستجابة.

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

ما إذا كانت كلمة المرور صحيحة أم لا، تنتهي صلاحية النص الرئيسي والنص العشوائي لذلك كل استخدام لمرة واحدة.

إذا كنت ترغب حقا في الغوص في هذا الأمر، انظر إلى بورفي - هيلمان التي تم إنشاؤها إلى "السماح لطرفين ليس لها معرفة مسبقة ببعضها البعض لإنشاء مفتاح سري مشترك على قناة اتصالات غير آمنة"

أنا لست خبيرا مشموسا، لذلك لا أعرف تماما ما إذا كان آمنا حقا إذا كان المهاجم لديه كل من العميل (رمز مصدر JavaScript) وآلية النقل (حزمة Sniffer)

يمكنك استخدام تطبيق JavaScript RSA لتشفير كلمة المرور قبل الإرسال. (هنا مثال على RSA في جافا سكريبت.)

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

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

لا SSL؟ لا أمان.

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

لا أعتقد أن القضية هنا هي التكنولوجيا، ولكن كيف توضح أهمية SSL. تزويدهم بمواد قراءة موثوقة، أنا متأكد من وجود الكثير من الويب.

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

ينجز SSL هذا من خلال مطالبة كل من الخادم ومتصفح الويب العميل أن يكون لديك Keypair عمومي غير متماثل / الخاص، والذي يستخدمونه لتشفير ونقل مفتاح جلسة عشوائية بينهما. يستخدم بقية المحادثة ثم مفتاح الجلسة الآمنة.

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

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

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

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

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

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

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

- الإسبانية - SE Me Acaba de Ocurrir Algo Que Puede Servir، Pero No Si Si Realmente Sea Algo Seguro. Por Medio de Php Puedes Generar Un Algoritmo Que Cree Un String En Base Al Timestamp O Algo Más، Y Después Colocar Esta Cadena El Html.

ملاحظة كيو كواندو ألجين Escribe Una Contraseña En Un Campo Input Tipo Password، Con Un Debug No Se Buede Ver El Valor Que Tecleo El Usuario (No Se Si Aesta Manera Pero No Quise Investigar Más)، Asi Que Podemos Utilizar La Contrassña كيو El Usuario Escribió Como Palabra Clave Para Incriptar La Cadena de Texto Qualo Previamente Habiamos Generado Con PHP، Por Medio de Un Algoritmo EN JS. Sería Algo Ase Como Incriptar Lo Encriptado. الخلفية لو كيو إيسارياموس enviado no sería la contrassña tecleada، SI لا esta última cadena النزين.

Buscando Un Contra، Lo único que se se se me ocurra es el atacante tendrá que dedicarle mucho tiempo الفقرة tratar de encontrar el agoritmo que creamos por medio de php y poder carriptar la cadena final، o tendrá que hackear el servidor para accider al php y obtener algoritmo.

Esto Es Solo Una Idea، Por Lo Que Si Pueden Decumme Como Esto Puede No Seguro، SE Los Agradecería.

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

أعتقد أن الطريقة الأكثر أمانا هي، بدلا من تخزين H (كلمه السر)، حيث H هو وظيفة التجزئة الخاصة بك في الاختيار، وتخزين g ^ h (كلمه السر) أي استخدام كلمة المرور كإجراء خاص لتبادل Key Diffie-Hellman. (يجب عليك أيضا استخدام G عشوائي للحصول على مستخدمين مختلفين أيضا، أيضا - يصبح الملح الخاص بك.) ثم للتحقق من ذلك، يمكنك إنشاء Nonce B، وإرسال المستخدم G ^ B، وحسب حساب (G ^ H (كلمه السر)) ^ ب. لا يحتاج المستخدم إلى معرفة g - يحتاجون إلى حساب فقط (g ^ b) ^ h (كلمه السر) = (g ^ h (كلمه السر)) ^ ب. الآن لديك عدد يعرف كلا الطرفين IFF. دخل المستخدم كلمة المرور الصحيحة، وبناء دليل على التحدي - دليل المعرفة الصفرية بناء على معرفة الرقم الصحيح هو تافهة، في حين أن الرقم العشوائي المستخدم مثل "المفتاح الخاص" الخاص بالخادم "يجعل المنهج المناعي لإعادة الهجمات.

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