طريقة آمنة لتخزين كلمات المرور إلى واجهات برمجة التطبيقات بدون OpenID؟

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

سؤال

سألت أ سؤال مماثل هنا بعد فترة من الوقت ، كانت جميع الإجابات تقدم OpenID وهي لطيفة ولكنها لا تعمل مع الخدمات التي تتطلب مصادقة لا تستخدمها (مثل EventBrite).

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

بعض الحلول الممكنة هي:

  1. تخزين بيانات الاعتماد في YAML مثله. يمكن اختراقها بسهولة.
  2. اطلب من المستخدم إدخال بيانات الاعتماد في نموذج على موقعي ، أقوم بحفظ بيانات الاعتماد في قاعدة البيانات الخاصة بي ، واستخدمها لتسجيل الدخول إلى EventBrite. يمكن اختراقها بسهولة.
  3. اطلب من المستخدم إدخال بيانات الاعتماد وأمررها مباشرة إلى EventBrite دون حفظها ، وأحفظ ملفات تعريف الارتباط لرأس الاستجابة إلى قاعدة البيانات ، وعندما تنتهي صلاحيتها ، اجعلهم يسجلون مرة أخرى. هل هذا يمكن اختراقه بسهولة؟

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

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

ما هي هذه الطريقة؟ ماذا ينقصني؟ هل من المقبول الذهاب مع #3 وحفظ ملفات تعريف الارتباط (ولكن لا يزال بحاجة إلى المستخدم لإرسال بريده الإلكتروني/كلمة المرور عبر نموذج أرسله إلى EventBrite)؟ ما هو الحل المقبول للمشكلة؟

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

المحلول

لا توجد طريقة آمنة للقيام بذلك. يمكنك توظيف الحلول ، ولكن هذا كل شيء.

  1. من المؤكد أن تخزين كلمات المرور في YAML أو XML في ClearTex
  2. في الواقع ، حتى تشفير وتخزين كلمات المرور أمر خاطئ. سيحتاج تطبيقك إلى طريقة لفك تشفير كلمات المرور ، بحيث يمكن للمهاجم أيضًا فك تشفير كلمات المرور.
  3. الطريقة الموصى بها لتخزين كلمات المرور هي Salt + Hash ، ولكن لأنها تصبح غير قابلة للاسترداد ، فهي عديمة الفائدة في قضيتك.
  4. بسبب 2 و 3 ، بغض النظر عن المكان الذي تخزن فيه بيانات اعتماد المستخدمين ، فأنت ضعيف.
  5. يعد تخزين ملفات تعريف الارتباط بدلاً من كلمات المرور فكرة أفضل. ولكن مرة أخرى ، يتضمن هذا كلمة المرور التي تمر عبر موقع الويب الخاص بك ، وهي ليست جيدة.

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

نصائح أخرى

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

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

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

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

للعمل مع API EventBrite ، أوصي بتأكد من أن جميع الاتصالات قد انتهت SSL ، وأن تقوم المصادقة باستخدام user_key بدلاً من اسم المستخدم وكلمة المرور.

مزيد من المعلومات حول المصادقة لـ EventBrite API هنا: http://developer.eventbrite.com/doc/auth/

بعد تسجيل الدخول ، يمكن للمستخدمين العثور على user_key هنا: http://www.eventbrite.com/userkeyapi

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

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