ثغرات التوثيق
كيف تسمح كلمات المرور الضعيفة والجلسات القابلة للتخمين ورموز الاستعادة المتوقعة للمهاجم بالدخول بلا بيانات حقيقية وكيف تبني توثيقا يصمد
- المسار
- أمن الويب
- الوقت المتوقع
- 25 د
- المستوى
- متوسط
قبل هذا الدرس
التوثيق هو كيف يقرر الموقع أنك أنت من تدعي وهو ليس ميزة واحدة بل سلسلة: الدخول ثم الجلسة التي تتذكرك بعده ثم مسار الاستعادة لما تنسى كلمة مرورك المهاجم يحتاج أضعف حلقة فقط في هذا الدرس نكسر ثلاث حلقات ثم نبني كل واحدة بشكل صحيح
الدخول
الدخول يفشل بأمان فقط لو كان التخمين مكلفا وثلاثة أشياء تجعله رخيصا:
- كلمات مرور ضعيفة أو شائعة لو كان
ravens123مسموحا فأحدهم سيجربه - لا حد للمحاولات بدون حد أو قفل يرسل المهاجم آلاف المحاولات
- كشف المستخدمين لو كانت رسالة لا يوجد مستخدم تختلف عن كلمة المرور خاطئة فالمهاجم يعرف أولا أي الأسماء موجودة ثم يركز تخمينه
app.post('/login', rateLimit({ max: 5, per: '15m', lockout: true }), async (req, res) => {
const user = db.user(req.body.username);
const ok = user && await bcrypt.compare(req.body.password, user.hash);
if (!ok) return res.json({ error: 'Invalid username or password' }); // one message
login(res, user);
});الجلسة
بعد الدخول يعطيك الخادم رمزا يثبت في الطلبات اللاحقة أنك دخلت مسبقا
لو كان هذا الرمز يمكن إنتاجه أو استنتاجه بلا معرفة سرية مثلا مشتق من رقم المستخدم أو من عداد فالمهاجم يزور رمز غيره
رمز مثل user-2 هدية غير الرقم فتصير المستخدم رقم 1
رمز الجلسة يجب أن يكون طويلا عشوائيا من مولد آمن ويخزن في الخادم مربوطا بالمستخدم فلا يحمل في داخله أي معنى يمكن تعديله
واضبط الكوكي HttpOnly; Secure; SameSite وأبطل الجلسة عند الخروج
استعادة كلمة المرور
مسار الاستعادة يقدر يسلم حسابا بلا أي كلمة مرور الرمز المرسل للمستخدم يجب أن يكون الطريق الوحيد للاستعادة فيجب أن يكون سرا لا يقدر المهاجم إنتاجه
رمز الاستعادة يجب أن يكون طويلا عشوائيا مربوطا بالحساب قصير الصلاحية يستخدم مرة واحدة ويرسل فقط لقناة صاحبه ولا يكشف أبدا لمن طلبه
كيف تنحمى منها
عامل السلسلة كلها كوحدة: كلمات مرور قوية مجزأة مع حد للمحاولات ورسالة خطأ واحدة موحدة وجلسات عشوائية تخزن في الخادم بخصائص كوكي آمنة ورموز استعادة عشوائية قصيرة لمرة واحدة وتحقق متعدد العوامل للحسابات ذات الصلاحية واعتمد على إطار موثوق بدل أن تبني أيا من هذا بيدك
اللابات
باب بلا قفل محترم
محلولسهللاب في المتصفح
ادخل بحساب admin عبر تخمين كلمة مروره الضعيفة
ادخل اللابمقفلجلسة يمكن تخمينها
محلولمتوسطلاب في المتصفح
انتحل جلسة الزعيم وافتح حسابه بدون أن تعرف كلمة مروره
ادخل اللابمقفلرمز استعادة يمكن حسابه
محلولصعبلاب في المتصفح
احسب رمز استعادة الزعيم وأعد تعيين كلمة مروره للاستيلاء على حسابه
ادخل اللابمقفل
