تخطَّ إلى المحتوى

Rate Limiting

تحديد المعدّل ضدّ التخمين العشوائي Rate Limiting

هجوم التخمين العشوائي (Brute Force) يجرّب آلاف كلمات المرور آليًّا حتى يصيب واحدة صحيحة؛ يُصدّه تحديد معدّل المحاولات (Rate Limiting) بدل الاعتماد على قفل الحساب وحده.

بدون قيد على عدد المحاولات، يستطيع مهاجم إرسال آلاف طلبات تسجيل الدخول آليًّا خلال ثوانٍ، مجرّبًا كلمات مرور شائعة أو مسرَّبة من اختراقات أخرى (Credential Stuffing) على حساب واحد أو عبر حسابات كثيرة دفعة واحدة.

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

الصياغة

POST /login   (بلا أي قيد على عدد الطلبات لكل عنوان IP أو حساب)

📄 مثال

// ✅ آمن: تأخير متزايد + سقف طلبات لكل IP، بدل قفل حساب فوري وصارم
const rateLimiter = new Map(); // بمثال حقيقي: استخدم Redis لا ذاكرة العملية

function checkRateLimit(ip) {
  const attempts = rateLimiter.get(ip) ?? 0;
  if (attempts > 10) return false;  // تجاوز السقف خلال النافذة الزمنية
  rateLimiter.set(ip, attempts + 1);
  return true;
}

if (!checkRateLimit(req.ip)) return res.status(429).send("حاول لاحقًا");

أهم النقاط

النقطةالوظيفة
429 Too Many Requestsرمز HTTP القياسي للردّ عند تجاوز الحدّ المسموح
تأخير متزايدتكبير المهلة تدريجيًّا بكل محاولة فاشلة إضافية بدل قفل فوري
CAPTCHAطبقة إضافية تميّز المستخدم البشري عن السكربتات الآلية بعد محاولات مشبوهة

💡 نصائح عملية

  • طبّق الحدّ على مستوى عنوان IP والحساب معًا — الاعتماد على أحدهما فقط يترك ثغرة للطرف الآخر من الهجوم

⚠️ أخطاء شائعة

  • قفل الحساب فورًا بعد محاولة واحدة فاشلة أو محاولات قليلة جدًّا — يسهّل حجب خدمة مستخدمين شرعيين عمدًا من مهاجم يعرف بريدهم فقط

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CYBERSECURITY الكامل بالعربي.