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

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

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

الدرس 2 من 25· ⏱ 3 دقائق قراءة

OWASP API Security Top 10

API Security Top 10 من OWASP تركز على التهديدات الخاصة بواجهات البرمجة (APIs). إليك أبرزها:

API1: Broken Object Level Authorization (BOLA)

المستخدم يستطيع الوصول إلى كائنات لا يملك صلاحية عليها عبر تغيير ID في الطلب.

// ثغرة 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: Excessive Data Exposure

API يعيد بيانات أكثر مما يحتاجه العميل، مثل إرجاع كامل كائن المستخدم (بما في ذلك كلمة المرور المشفرة) بدلا من الحقول المطلوبة فقط.

// سيئ - إرجاع كل الحقول
res.json(user);

// جيد - إرجاع الحقول المطلوبة فقط
res.json({ id: user.id, name: user.name, email: user.email });

API4: Lack of Resources & Rate Limiting

عدم تحديد عدد الطلبات يسمح بهجمات DDoS أو Brute Force.

بدون 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: Mass Assignment

ربط بيانات الطلب مباشرة بكائن دون تصفية يسمح للمستخدم بتعديل حقول محمية.

// سيئ - المستخدم يرسل { "role": "admin" }
const user = await User.create(req.body);

// جيد - تحديد الحقول المسموحة فقط
const user = await User.create({
  name: req.body.name,
  email: req.body.email
});

API7: Security Misconfiguration

إعدادات خاطئة مثل CORS واسع، رسائل خطأ تفصيلية، أو ترك endpoints اختبارية في الإنتاج.

API8: Injection

حقن SQL أو NoSQL أو OS Commands عبر مدخلات API.

// سيئ - استعلام مباشر
const query = `SELECT * FROM users WHERE id = ${req.params.id}`;

// جيد - parameterized query
const query = 'SELECT * FROM users WHERE id = $1';
db.query(query, [req.params.id]);

API9: Improper Asset Management

API versions قديمة لا تزال تعمل أو endpoints منسية دون حماية.

API10: Unsufficient Logging & Monitoring

عدم تسجيل المحاولات الفاشلة أو الهجمات يمنع اكتشاف الاختراق في الوقت المناسب.

// جيد - تسجيل المحاولات الفاشلة
app.use((err, req, res, next) => {
  logger.warn({
    ip: req.ip,
    path: req.path,
    userId: req.user?.id,
    error: err.message
  });
  res.status(500).json({ error: 'حدث خطأ' });
});

ملخص التهديدات

التهديدالخطورةالحل
BOLAعاليةالتحقق من الصلاحية على كل كائن
Broken AuthعاليةJWT قصير + Rate Limiting
Excessive DataمتوسطةDTOs و GraphQL
Rate Limitingمتوسطةexpress-rate-limit
InjectionعاليةParameterized Queries
Misconfigurationمتوسطةفحوصات أمنية دورية

⚠️ معظم اختراقات API تحدث بسبب ثغرات بسيطة كان يمكن منعها بالإعدادات الصحيحة والتحقق من الصلاحيات.

🎯 التالي: المصادقة الآمنة (JWT و OAuth)

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

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