ما هي الطريقة الصحيحة لاستيراد جميع مستخدمي Discourse الحاليين إلى intercoin.app من Discourse؟ هل هناك نوع من نقاط النهاية REST التي تُرجع جميع المستخدمين بكلمات المرور المجزأة والأملاح الخاصة بهم، من بين أشياء أخرى؟ ما هو الرابط الخاص بخوارزمية التجزئة على github؟ سأضطر إلى البرمجة من جانبنا، لاستخدام نفس خوارزمية التجزئة مع كلمة المرور المدخلة والملح، إذا لم تعمل خوارزميتنا الخاصة، للسماح لهؤلاء الأشخاص بتسجيل الدخول. أعتقد أن #2 ذو صلة كلما قام مستخدم Discourse بتشغيل تسجيل الدخول الأحادي لاحقًا (مثلما فعلنا) لذا فإن حله سيساعد مستخدمي Discourse الآخرين أيضًا.
def confirm_password?(password)
return false unless password_hash && salt
self.password_hash == hash_password(password, salt)
end
def hash_password(password, salt)
raise StandardError.new("password is too long") if password.size > User.max_password_length
Pbkdf2.hash_password(password, salt, Rails.configuration.pbkdf2_iterations, Rails.configuration.pbkdf2_algorithm)
end
لقد تحدثت للتو مع فريقنا، وهم يوافقون، أنا مستعد لدفع لشخص ما لإنشاء إضافة صغيرة لـ Discourse تعرض عبر نقطة نهاية بعض معلومات JSON حول مستخدم، بالنظر إلى عنوان بريده الإلكتروني.
لذلك، بالنظر إلى البريد الإلكتروني، ستبحث الإضافة ببساطة في جدول user_email حسب البريد، ثم تجد user_id وتحصل على صف المستخدم، وترسل جميع الحقول “الآمنة”، بما في ذلك الملح.
لمزيد من الأمان، يمكن توقيع الطلبات عبر HMAC باستخدام سر مشترك يمكن توفيره للإضافة.
هل يرغب أي شخص في القيام بهذا؟ راسلني أو رد هنا وأخبرني كيف يمكنني التواصل معك. نأمل أن يكون الأمر مباشرًا (بعض استعلامات SELECT وفحص HMAC إذا تم تعيين السر). سنقرأ JSON.
مكتبة xorcist هي مجرد XOR أسرع للسلاسل النصية، صحيح؟ ماذا يحدث إذا انتهت إحدى الأحرف بـ 0 لأن ‘a’ تم عمل XOR لها مع ‘a’ - ماذا يحدث لتلك السلسلة؟ أليست السلاسل النصية منتهية بـ null؟
هدفي هو نقل هذا إلى PHP، لذا فإن أي شيء يمكنك فعله للمساعدة (مثل تزويدي بمعلومات حول كيفية تكراره في PHP) سيكون مفيدًا جدًا.
نعم! تمكنت من إنشاء نص برمجي يمر عبر جميع مستخدمي Discourse، ويقوم باستيرادهم مع تجزئة عبارة المرور الخاصة بهم إلى منصتنا.
قريبًا، سنتمكن من السماح لأي شخص لديه منتدى Discourse بإضافة الأحداث، ومؤتمرات الفيديو، والوسائط، والمزيد، مع بقاء Discourse في علامة التبويب “مناقشة”. يمكنك رؤية النتيجة على https://intercoin.app
بشكل أساسي، تحويل أي تثبيت Discourse إلى شبكة اجتماعية حديثة على غرار فيسبوك. لقد عملنا لسنوات على هذه الميزات والآن نريد دمجها بإحكام مع Discourse و Wordpress أيضًا. حتى يتمكن الأشخاص من الجمع بين Wordpress و Discourse و Qbix واستضافة مجتمعهم بالكامل بأنفسهم.
في Qbix، نقوم بتجزئة كلمة المرور على العميل على الأقل باستخدام sha1(password + userId) قبل إرسالها إلى الخادم. حتى عندما يكون https. نقوم بذلك حتى لا يمتلك الخادم أو أي MITM كلمة المرور أبدًا، لإعادة استخدامها عبر المواقع. ولكن، يرسل Discourse كلمة المرور ببساطة إلى الخادم. لذلك اضطررنا إلى إيقاف هذه التجزئة من جانب العميل. هل من الممكن إجراء بعض التكرارات من hash_pbkdf2 على جانب العميل، والباقي على جانب الخادم؟ لقد حاولت ويبدو أنها لا تتطابق:
هل سيكون من الممكن استخدام Discourse كمزود SSO، بدلاً من استخدام موقعنا كمزود SSO؟ عندها من المرجح أن يقوم مضيفو منتديات Discourse بتوسيعه بميزات Qbix، نظرًا لأن تسجيل الدخول سيظل كما هو تمامًا، وعلى جانب Discourse. فيسبوك، جوجل، وأي شيء آخر. هل هناك أي وثائق حول نوع المعلومات التي يعيدها Discourse Connect كمزود SSO إلى موقع المستهلك الخاص بنا؟ هل يشمل أشياء مثل الصورة التي يمكننا تنزيلها، والاسم الأول، والاسم الأخير، واسم المستخدم على الأقل؟
بصراحة، لا أعتقد أن إرسال كلمة مرور عبر HTTPS يمثل أكبر تحدٍ أمني لديك في الوقت الحالي.
بالتأكيد. أعتقد أنك تحصل على معظم الأشياء في مُسلسِل المستخدم القياسي.
ولكن إذا لم يكن ذلك كافيًا، يمكنك دائمًا استخدام واجهة برمجة التطبيقات (API) للحصول على مزيد من المعلومات من Discourse.
\u003e بصراحة، لا أعتقد أن إرسال كلمة مرور عبر HTTPS يمثل أكبر تحدٍ أمني لديك في الوقت الحالي.\n\nلطيف. أرى الـ sha1 الخاص بك وأخفضه إلى md5 \nhttps://news.ycombinator.com/item?id=32796841\n\nأرى لماذا لا يعمل pbkdf2 حقًا لتقسيمه… المشكلة هي السطر الأول:\n\n\n\nU1 = PRF(Password, Salt + INT_32_BE(i))\nU2 = PRF(Password, U1)\n⋮\nUc = PRF(Password, Uc−1)\n\n\nهل لديك أي أفكار حول كيفية تقسيمه، مع ذلك؟ أعتقد أنه يمكنني فقط استخدام مكتبة php النقية: https://github.com/Spomky-Labs/pbkdf2/blob/master/src/PBKDF2.php\n\nأود أن أوصي Discourse بتجزئة الأشياء باستخدام ملح (معرف المستخدم يعمل) قبل إرسال كلمة المرور عبر الشبكة. لماذا لا؟ لا يجب أن تصبح غير متوافقة مع ما تخزنه في قاعدة البيانات الآن. ببساطة قم بأول 100 تكرار في Javascript، ثم اطرح 10 من 64000. لديك تطبيق مخصص له على أي حال (منسوخ من rails) لذا سترسل ببساطة متغير isHashed، وإذا كان صحيحًا، فقم فقط بـ "آخر" 64K-10 خطوات.
معرف المستخدم غير معروف قبل تسجيل الدخول لذلك لن ينجح هذا…
10 تكرارات ليست آمنة، و 63990 تكرارًا أقل أمانًا من 64000 تكرار. لذلك، على الرغم من أنها هامشية، يبدو أنك تستبدل طريقة آمنة بطريقتين أقل أمانًا والكثير من التعقيد الإضافي.