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 الكامل بالعربي.