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

Unrestricted Resource Consumption

استهلاك موارد غير مقيّد Unrestricted Resource Consumption

API4:2023 — نسخة أوسع من 'Lack of Rate Limiting' القديمة: لا تشمل فقط عدد الطلبات، بل أي مورد قابل للاستنزاف — CPU، ذاكرة، تخزين، وتكلفة استدعاءات خدمات خارجية مدفوعة.

التوسّع عن النسخة القديمة (2019) مهم: قد يكون الـ endpoint محميًا بـ Rate Limiting لكنه لا يزال عرضة للاستنزاف لو سمح بحجم رفع ملفات غير محدود، أو استعلامات GraphQL عميقة جدًا، أو صفحات نتائج (pagination) بدون حد أقصى لحجم الصفحة — كل هذه تستهلك موارد الخادم أو تكلفة API خارجي بشكل غير متناسب مع طلب واحد.

الصياغة

حدود لكل: عدد الطلبات، حجم الطلب، عمق الاستعلام، عدد العناصر بالصفحة، مهلة التنفيذ

📄 مثال

// سيئ — pagination بلا حد أقصى
app.get('/api/items', (req, res) => {
  const limit = parseInt(req.query.limit) || 1000000;
  res.json(db.items.findMany({ take: limit }));
});

// جيد — حد أقصى صارم
app.get('/api/items', (req, res) => {
  const limit = Math.min(parseInt(req.query.limit) || 20, 100);
  res.json(db.items.findMany({ take: limit }));
});

// حد لحجم الرفع
app.use(express.json({ limit: '1mb' }));

أهم النقاط

النقطةالوظيفة
شبكةRate Limiting لكل مستخدم/IP/مسار
حجم البياناتحد أقصى لحجم الطلب وحجم الملفات المرفوعة
الاستعلاماتDepth limiting و Query complexity analysis في GraphQL
التكلفةحدود على استدعاءات API خارجية مدفوعة (مثل خدمات SMS أو AI) لكل مستخدم

💡 نصائح عملية

  • قِس التكلفة الحقيقية للـ endpoint (CPU/ذاكرة/استدعاءات خارجية) وليس فقط عدد الطلبات بالثانية

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

  • الاكتفاء بـ Rate Limiting على المسار الرئيسي ونسيان مسارات مساعدة مثل تصدير البيانات (export) أو البحث الحر

خصائص ذات صلة

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