Unsafe Consumption of APIs
استهلاك غير آمن لـ APIs خارجية Unsafe Consumption of APIs
API10:2023 — فئة جديدة كليًا تنظر للاتجاه المعاكس: أمن الـ API الذي تستهلكه أنت من طرف ثالث، لا الذي تبنيه أنت.
المطوّرون عادة يثقون ببيانات القادمة من API خارجي أكثر من مدخلات المستخدم المباشرة، فيطبّقون عليها فحوصات أضعف رغم أنها ليست أكثر أمانًا بالضرورة — الطرف الثالث قد يُخترق، أو يتغيّر سلوكه، أو يعيد توجيه (redirect) الطلب لخادم مختلف تمامًا. مثال: خدمة SaaS خارجية مُخترقة ترسل بيانات 'مُخصَّبة' (enriched) تحتوي حقن SQL، فينفّذها تطبيقك بثقة عمياء عند تخزينها بقاعدة بياناتك.
الصياغة
عامل كل استجابة من API خارجي كمدخل غير موثوق — طبّق نفس فحوصات مدخلات المستخدم
📄 مثال
// سيئ — يثق باستجابة الطرف الثالث ويتبع أي تحويل بشكل أعمى
const enrichment = await fetch('https://third-party.example.com/enrich?email=' + email);
const data = await enrichment.json();
await db.user.update({ where: { email }, data }); // بلا تحقق أو تعقيم
// جيد — تحقق، تعقيم، ومنع تحويلات غير متوقعة
const enrichment = await fetch('https://third-party.example.com/enrich?email=' + email, {
redirect: 'manual', // لا تتبع تحويلات تلقائيًا
});
if (enrichment.status >= 300 && enrichment.status < 400) {
throw new Error('تحويل غير متوقع من طرف ثالث');
}
const raw = await enrichment.json();
const safeData = enrichmentSchema.parse(raw); // تحقق صارم بمخطط (Zod/Joi)
await db.user.update({ where: { email }, data: safeData });أهم النقاط
| النقطة | الوظيفة |
|---|---|
| التحويلات | لا تتبع HTTP redirects بشكل أعمى — Allowlist للوجهات المسموحة فقط |
| التحقق | طبّق مخطط تحقق صارم (Schema Validation) على كل استجابة خارجية قبل استخدامها |
| النقل | TLS إلزامي لكل تكامل مع API خارجي، وتقييم الوضع الأمني للمزوّد قبل الربط |
💡 نصائح عملية
- هذه الفئة مرتبطة مباشرة بـ SSRF — أي ميزة تجلب أو تتبع روابط من طرف خارجي معرّضة للفئتين معًا
⚠️ أخطاء شائعة
- تخزين أو تنفيذ بيانات من API خارجي دون نفس مستوى التعقيم المطبّق على مدخلات المستخدم المباشرة
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار API-SECURITY الكامل بالعربي.