أفضل ممارسات المصادقة الثنائية وأمان كلمات المرور
لقد قمت ببناء تطبيق ويب، والمستخدمون يسجلون. لكن هل حساباتهم آمنة حقًا؟ كلمات المرور الضعيفة وغياب المصادقة الثنائية (2FA) هما من أسهل الطرق للمهاجمين للاختراق. في هذا الدليل، سنستعرض أفضل الممارسات العملية والدائمة لأمان كلمات المرور و2FA التي يمكنك تنفيذها اليوم.
لماذا لا يزال أمان كلمات المرور مهمًا
على الرغم من سنوات من التحذيرات، تظل كلمات المرور طريقة المصادقة الأساسية لمعظم تطبيقات الويب. يعرف المهاجمون ذلك ويستهدفون كلمات المرور من خلال التصيد الاحتيالي، وحشو بيانات الاعتماد، والقوة الغاشمة. يمكن أن تؤدي كلمة مرور واحدة مخترقة إلى الاستيلاء على الحساب، وسرقة البيانات، وتلف السمعة.
سياسات كلمات المرور القوية و2FA ترفع بشكل كبير من صعوبة المهمة على المهاجمين. دعنا ننظر في كيفية القيام بكلاهما بشكل صحيح.
تخزين كلمات المرور: التجزئة الصحيحة
لا تقم أبدًا بتخزين كلمات المرور كنص عادي. قم دائمًا بتجزئتها باستخدام خوارزمية قوية وبطيئة مصممة لكلمات المرور. التجزئات السريعة مثل SHA-256 غير مناسبة لأنها تمكن هجمات القوة الغاشمة السريعة.
الخوارزميات الموصى بها:
- Argon2id – الفائز في مسابقة تجزئة كلمات المرور، مقاوم لهجمات GPU والقنوات الجانبية.
- bcrypt – مدعوم على نطاق واسع، مجرب، وبطيء حسب التصميم.
- scrypt – صعب الذاكرة، جيد لمنع الهجمات المعجلة بالعتاد.
مثال باستخدام bcrypt في Node.js:
const bcrypt = require('bcrypt');
const saltRounds = 12;
async function hashPassword(password) {
return await bcrypt.hash(password, saltRounds);
}
async function verifyPassword(password, hash) {
return await bcrypt.compare(password, hash);
}
استخدم دائمًا ملحًا فريدًا لكل كلمة مرور (معظم المكتبات تتعامل مع هذا تلقائيًا). اضبط عامل التكلفة بحيث تستغرق التجزئة حوالي 100-500 مللي ثانية على خادمك.
سياسات كلمات المرور التي تساعد فعلاً
انسَ القواعد المعقدة مثل "يجب أن تتضمن رمزًا ورقمًا". الإرشادات الحديثة (NIST SP 800-63B) توصي بـ:
- الحد الأدنى للطول 8 أحرف، ولكن شجع على استخدام عبارات المرور (مثل 4+ كلمات عشوائية).
- التحقق من قوائم كلمات المرور المخترقة (مثل واجهة Have I Been Pwned API).
- لا تفرض انتهاء صلاحية دوري إلا إذا تم الاشتباه في اختراق.
- السماح بجميع أحرف ASCII القابلة للطباعة والمسافات.
- تحديد معدل محاولات تسجيل الدخول لمنع القوة الغاشمة.
قم بتنفيذ مقياس قوة بسيط يقدم ملاحظات دون حظر كلمات المرور المشروعة.
طرق المصادقة الثنائية (2FA)
تضيف 2FA عاملًا ثانيًا: شيء تملكه (هاتف، مفتاح عتاد) أو شيء أنت عليه (بيانات حيوية). إليك الطرق الشائعة، مرتبة حسب الأمان:
| الطريقة | الأمان | سهولة الاستخدام |
|---|---|---|
| مفاتيح الأمان العتادية (WebAuthn/FIDO2) | عالٍ | متوسط |
| تطبيقات المصادقة (TOTP) | عالٍ | عالٍ |
| إشعارات الدفع | متوسط | عالٍ |
| رموز SMS | منخفض | عالٍ |
SMS عرضة لتبديل بطاقة SIM والاعتراض. يفضل استخدام TOTP أو WebAuthn عندما يكون ذلك ممكنًا.
تنفيذ 2FA القائمة على TOTP
TOTP (كلمة مرور لمرة واحدة قائمة على الوقت) توازن رائع بين الأمان وسهولة الاستخدام. إليك سير عمل عالي المستوى:
- قم بإنشاء مفتاح سري للمستخدم (مثل 32 بايت عشوائي، مشفر base32).
- أنشئ URI من نوع otpauth:// واعرض رمز QR للمستخدم لمسحه ضوئيًا باستخدام تطبيق مصادقة.
- تحقق من أن المستخدم يمكنه إنشاء رمز صالح قبل تمكين 2FA.
- قم بتخزين السر بشكل آمن (مشفر عند التخزين).
- قدم رموز نسخ احتياطي لاستعادة الحساب.
أثناء تسجيل الدخول، بعد التحقق من كلمة المرور، اطلب رمز TOTP. تحقق منه باستخدام مكتبة مثل otplib أو speakeasy.
const { authenticator } = require('otplib');
// Generate secret
const secret = authenticator.generateSecret();
// Verify token
const isValid = authenticator.verify({ token: userToken, secret });
اسمح بنافذة زمنية صغيرة (مثل ±1 فترة) لمراعاة انحراف الساعة.
WebAuthn: مستقبل المصادقة
WebAuthn (جزء من FIDO2) تمكن المصادقة بدون كلمة مرور أو كعامل ثانٍ باستخدام مفاتيح العتاد أو أدوات المصادقة المدمجة (Touch ID، Windows Hello). إنها مقاومة للتصيد الاحتيالي لأن بيانات الاعتماد مرتبطة بالأصل.
تنفيذ WebAuthn يتطلب:
- توليد تحدي من جانب الخادم والتحقق منه.
- JavaScript من جانب العميل باستخدام WebAuthn API.
- تخزين المفاتيح العامة ومعرفات بيانات الاعتماد لكل مستخدم.
مكتبات مثل SimpleWebAuthn تجعل الأمر أسهل. على الرغم من أنها أكثر تعقيدًا من TOTP، إلا أن WebAuthn توفر أقوى حماية.
تحديد المعدل وقفل الحساب
حتى مع 2FA، يجب منع هجمات القوة الغاشمة على كلمات المرور. قم بتنفيذ:
- تحديد المعدل لكل IP ولكل حساب (مثل 5 محاولات في الدقيقة).
- تراجع أسي بعد المحاولات الفاشلة.
- قفل الحساب بعد الإخفاقات المتكررة، مع عملية إلغاء قفل آمنة (مثل التحقق عبر البريد الإلكتروني).
- CAPTCHA بعد بضع محاولات فاشلة.
كن حذرًا من عدم قفل المستخدمين الشرعيين بشكل دائم؛ استخدم أقفالًا مؤقتة وأخطر المستخدم.
إعادة تعيين كلمة المرور الآمنة
عمليات إعادة تعيين كلمة المرور هي ناقل هجوم شائع. اتبع هذه القواعد:
- استخدم رمزًا لمرة واحدة ومحدود الوقت يُرسل عبر البريد الإلكتروني.
- لا تكشف ما إذا كان البريد الإلكتروني موجودًا في النظام.
- اطلب من المستخدم إعادة المصادقة إذا كان مسجلاً بالفعل.
- قم بإبطال جميع الجلسات بعد إعادة تعيين كلمة المرور.
تثقيف المستخدمين دون لومهم
الأمان مسؤولية مشتركة. قدم إرشادات واضحة:
- استخدم مدير كلمات مرور لإنشاء وتخزين كلمات مرور فريدة.
- قم بتمكين 2FA كلما أمكن.
- كن حذرًا من محاولات التصيد الاحتيالي.
يمكن أن تساعد النصائح داخل التطبيق وصفحة أمان مخصصة.
الأسئلة الشائعة
هل 2FA عبر SMS أفضل من عدم وجود 2FA؟
نعم، 2FA عبر SMS أفضل من لا شيء، لكنها عرضة لتبديل بطاقة SIM والاعتراض. يفضل TOTP أو WebAuthn لأمان أقوى.
كم مرة يجب أن أقوم بتدوير خوارزميات تجزئة كلمات المرور؟
لا تحتاج إلى التدوير إلا إذا تم اكتشاف ثغرة. ومع ذلك، يمكنك إعادة تجزئة كلمات المرور عند تسجيل الدخول بنجاح عند ترقية المعلمات (مثل زيادة تكلفة bcrypt).
هل يمكنني استخدام 2FA مع OAuth أو تسجيل الدخول الاجتماعي؟
نعم، ولكن عادةً ما يتم إدارة 2FA بواسطة مزود الهوية. إذا كنت تستخدم تسجيل الدخول الاجتماعي، فتأكد من أن عملية استعادة الحساب الخاصة بك آمنة.
هل أنت مستعد لتعزيز أمان تطبيقك؟ ابدأ بتنفيذ تجزئة كلمات المرور القوية و2FA القائمة على TOTP اليوم. لمزيد من أدوات المطورين، تحقق من JSON Formatter لتصحيح استجابات API بسرعة.