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

🔐 شرح أمن API وقواعد البيانات

تهديدات API الشائعة

الدرس 2 من 29· ⏱ 5 دقائق قراءة· 🗓 آخر تحديث: ٢٣ يوليو ٢٠٢٦

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)

شرح تهديدات API الشائعة — أمن API وقواعد البيانات بالعربي
تهديدات API الشائعةأمن API وقواعد البيانات بالعربي · The Code Fix

هل كان هذا الدرس مفيدًا؟