database - أفضل طريقة لتخزين كلمة المرور في قاعدة البيانات




security passwords (6)

أعمل في مشروع يجب أن يكون لديه مصادقة (اسم المستخدم / تصريح)

كما أنه يتصل بقاعدة بيانات لذلك كنت أحسب أن أقوم بتخزين اسم المستخدم وكلمة المرور هناك ولكن يبدو أنه ليس فكرة جيدة أن يكون كلمات المرور مجرد حقل نصي في جدول يجلس على db

أنا باستخدام C # والاتصال بخادم اكسبريس 2008. يمكن لأي شخص أن يقترح (بأكبر عدد ممكن من الأمثلة) ما هي أفضل طريقة لتخزين هذا النوع من البيانات؟

(أنا منفتح على فكرة أن لا يتم تخزين هذه المعلومات في ديسيبل إذا كان يمكن توفير سبب وجيه)


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

بهذه الطريقة (من الناحية العملية) من المستحيل استرداد كلمة مرور نص عادي.


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


قد أكون خارج الموضوع قليلاً لأنك ذكرت الحاجة إلى اسم مستخدم وكلمة مرور ، وفهمى لهذه المشكلة هو ليس الأفضل ، بل هو OpenID شيء يستحق النظر فيه؟

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

قد لا يكون مناسبًا إذا كان التطبيق المعني مخصصًا للاستخدام الداخلي فقط

يوفر RPX طريقة سهلة لطيفة لإدخال دعم OpenID في تطبيق ما.


كتجزئة متماسكة ممسوحة باستخدام خوارزمية آمنة مثل sha-512.


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

لذا ، في حين أنه أمر جيد تفكر في هذا ، وهو سؤال جيد ، فهذه في الواقع نسخة مكررة من هذه الأسئلة (على الأقل):

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






passwords