Broken Authentication
كسر المصادقة Broken Authentication
API2:2023 — ثغرات في آلية تسجيل الدخول أو إدارة الرموز تسمح للمهاجم بانتحال هوية مستخدم شرعي.
تشمل هذه الفئة كل ما يضعف التحقق من هوية المستخدم: كلمات مرور بلا حد أدنى للقوة، عدم وجود Rate Limiting على /login (يسمح بـ Brute Force)، رموز JWT بلا انتهاء صلاحية أو بخوارزمية توقيع ضعيفة، ومفاتيح API ثابتة لا تنتهي أبدًا.
نقطة يخطئ فيها كثيرون: تأمين شاشة تسجيل الدخول لا يكفي — يجب تأمين كل مسار حساس متعلق بالهوية: تجديد كلمة المرور، تأكيد البريد، وتحديث الرمز (refresh token).
الصياغة
POST /api/auth/login → Rate Limit + هاش قوي + JWT قصير العمر
📄 مثال
// سيئ
const token = jwt.sign({ userId: user.id }, SECRET); // بلا expiry
// جيد
const token = jwt.sign({ userId: user.id }, SECRET, { expiresIn: '15m' });
const refreshToken = jwt.sign({ userId: user.id }, REFRESH_SECRET, { expiresIn: '7d' });
// Rate limiting لتسجيل الدخول
const rateLimit = require('express-rate-limit');
app.post('/api/auth/login', rateLimit({ windowMs: 60 * 60 * 1000, max: 5 }), loginHandler);أهم النقاط
| النقطة | الوظيفة |
|---|---|
| كلمات المرور | bcrypt (cost 12+) أو argon2 — لا تخزّنها أبدًا كنص صريح أو MD5/SHA1 |
| JWT | خوارزمية توقيع قوية (RS256/HS256)، انتهاء صلاحية قصير، لا تضع أسرارًا بالـ payload |
| MFA | طبقة تحقق إضافية للحسابات الحساسة (إدارية أو مالية) |
💡 نصائح عملية
- أبطل كل الجلسات القديمة فور تغيير كلمة المرور
⚠️ أخطاء شائعة
- رسائل خطأ تكشف هل البريد موجود أم لا ('البريد غير مسجل' مقابل 'كلمة مرور خاطئة') — توحّد الرسالة أفضل
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار API-SECURITY الكامل بالعربي.