OWASP API Security Top 10 (نسخة 2023)
API Security Top 10 من OWASP تركز على التهديدات الخاصة بواجهات البرمجة (APIs) — منفصلة عن قائمة OWASP Top 10 العامة لتطبيقات الويب. القائمة تُحدَّث دوريًا لتواكب التهديدات الجديدة؛ النسخة الحالية 2023 أعادت ترتيب بعض البنود ودمجت أخرى وأضافت ثلاث فئات جديدة كليًا لم تكن موجودة بالنسخة السابقة (2019).
💡 إذا رأيت مصدرًا يذكر "Excessive Data Exposure" أو "Insufficient Logging" كبند مستقل، فهو يشير للنسخة القديمة (2019) — لا تزال المفاهيم مهمة، لكنها أُعيد تنظيمها ضمن بنود 2023 أدناه.
API1: Broken Object Level Authorization (BOLA)
المستخدم يستطيع الوصول إلى كائنات لا يملك صلاحية عليها عبر تغيير ID في الطلب. أعلى بند بالقائمة منذ 2019 وحتى اليوم.
// ثغرة BOLA - المستخدم يغير معرف المستخدم الآخر
GET /api/users/45678/posts
// إذا كان المستخدم الحالي رقمه 12345، يجب رفض الطلب
API2: Broken Authentication
ثغرات في آلية المصادقة مثل كلمات مرور ضعيفة، رموز JWT غير منتهية الصلاحية، أو endpoints تسجيل الدخول بدون Rate Limiting.
// سيئ - JWT بدون expiry
const token = jwt.sign({ userId: user.id }, SECRET);
// جيد - مع expiry قصير و refresh token
const token = jwt.sign({ userId: user.id }, SECRET, { expiresIn: '15m' });
API3: Broken Object Property Level Authorization
بند دمج بندين منفصلين من نسخة 2019 (Excessive Data Exposure وMass Assignment) لأن سببهما الجذري واحد: غياب التحقق من الصلاحية على مستوى حقل داخل الكائن، لا الكائن كاملًا.
// وجه القراءة (Excessive Data Exposure سابقًا) - سيئ
res.json(user); // يرجع passwordHash وحقولًا حساسة أخرى
// جيد - حقول محددة فقط
res.json({ id: user.id, name: user.name, email: user.email });
// وجه الكتابة (Mass Assignment سابقًا) - سيئ
// المستخدم يرسل { "role": "admin" } ضمن الجسم
const user = await User.create(req.body);
// جيد - allowlist صريح للحقول المسموحة
const user = await User.create({
name: req.body.name,
email: req.body.email
});
API4: Unrestricted Resource Consumption
نسخة أوسع من "Lack of Resources & Rate Limiting" القديمة: لا تقتصر على عدد الطلبات، بل تشمل أي مورد قابل للاستنزاف — حجم الرفع، عمق استعلامات GraphQL، وتكلفة استدعاءات خدمات خارجية مدفوعة.
بدون Rate Limiting:
attacker --> 10,000 طلب في الدقيقة --> خادم (ينهار)
مع Rate Limiting:
attacker --> 100 طلب --> 429 Too Many Requests
API5: Broken Function Level Authorization
مستخدم عادي يستطيع استدعاء دوال administrators.
// سيئ - أي مستخدم يحذف المستخدمين
app.delete('/api/users/:id', async (req, res) => {
await User.delete(req.params.id);
});
// جيد - فقط المشرفون
app.delete('/api/users/:id', isAdmin, async (req, res) => {
await User.delete(req.params.id);
});
API6: Unrestricted Access to Sensitive Business Flows
بند جديد كليًا في 2023: API يعرّض عملية أعمال حساسة (شراء منتج محدود، حجز، تسجيل حساب) دون أي حماية من الاستخدام الآلي المفرط — حتى لو كان الكود خاليًا من أي خطأ تقني. مثال شائع: بوت يشتري كل مخزون منتج محدود الإصدار خلال ثوانٍ من إطلاقه لإعادة بيعه (Scalping).
درس مستقل مخصص لهذا البند: حماية تدفقات الأعمال الحساسة.
API7: Server Side Request Forgery (SSRF)
بند جديد كليًا في 2023: عندما يقبل API رابطًا من المستخدم ويجلبه من جهة الخادم دون تحقق، يستطيع المهاجم توجيهه لموارد داخلية — بما فيها خدمات بيانات اعتماد السحابة.
// سيئ - يجلب أي رابط يرسله المستخدم
app.post('/api/fetch-image', async (req, res) => {
const response = await fetch(req.body.url);
res.send(await response.buffer());
});
// المهاجم يرسل رابط خدمة Metadata الداخلية بدل رابط صورة
درس مستقل مخصص لهذا البند: الحماية من SSRF.
API8: Security Misconfiguration
إعدادات خاطئة مثل CORS واسع، رسائل خطأ تفصيلية، أو ترك endpoints اختبارية في الإنتاج.
API9: Improper Inventory Management
نسخة أوسع من "Improper Asset Management" القديمة: نسخ API قديمة لا تزال تعمل بلا تحديثات أمنية، بيئات اختبار مكشوفة، أو تكاملات طرف ثالث غير موثّقة.
API10: Unsafe Consumption of APIs
بند جديد كليًا في 2023 وينظر بالاتجاه المعاكس: أمن الـ APIs التي تستهلكها أنت من طرف ثالث، لا التي تبنيها. المطوّرون غالبًا يثقون ببيانات الطرف الثالث أكثر مما يجب، فيطبّقون عليها فحوصات أضعف من فحوصات مدخلات المستخدم المباشرة.
درس مستقل مخصص لهذا البند: الاستهلاك الآمن لـ APIs خارجية.
أين ذهب Injection والتسجيل غير الكافي؟
بندا "Injection" و"Insufficient Logging & Monitoring" من نسخة 2019 لم يعودا بندين مستقلين في قائمة 2023 الرسمية، لكنهما لا يزالان تهديدين حقيقيين تمامًا — يغطيهما هذا المسار بعمق في دروس مخصصة: الحماية من SQL Injection وسجلات التدقيق.
ملخص التهديدات
| البند (2023) | الخطورة | الحل |
|---|---|---|
| API1: BOLA | عالية | التحقق من الصلاحية على كل كائن |
| API2: Broken Auth | عالية | JWT قصير + Rate Limiting |
| API3: Broken Object Property Level Auth | متوسطة | DTOs + Allowlist للحقول القابلة للكتابة |
| API4: Unrestricted Resource Consumption | متوسطة | express-rate-limit + حدود حجم/عمق |
| API6: Sensitive Business Flows | متوسطة-عالية | بصمة جهاز + تحليل سلوكي |
| API7: SSRF | عالية | Allowlist للمضيفين، منع تحويلات تلقائية |
| API8: Misconfiguration | متوسطة | فحوصات أمنية دورية |
| API10: Unsafe Consumption of APIs | متوسطة | تحقق من كل استجابة خارجية كأنها مدخل مستخدم |
⚠️ معظم اختراقات API تحدث بسبب ثغرات بسيطة كان يمكن منعها بالإعدادات الصحيحة والتحقق من الصلاحيات — الأغلبية ليست ثغرات "غريبة" بل غياب فحص أساسي كان يجب وجوده أصلًا.
🎯 التالي: المصادقة الآمنة (JWT و OAuth)