فحص ثغرات الاعتماديات API
افحص ما يصل إلى 50 اعتمادية مفتوحة المصدر عبر OSV.dev في طلب واحد. يعيد معرّفات CVE المرادفة، ودرجة CVSS أساسية محسوبة، وتصنيفات CWE، والإصدارات الدقيقة التي تعالج كل نشرة أمنية.
لا تملك مفتاح API؟
سجّل الدخول إلى حسابك لإنشاء وإدارة مفاتيح API.
دليل التكامل
انسخ المقتطف، استبدل مفتاح API الخاص بك، ثم شغّله. يعمل مع أي عميل HTTP — أمثلة أدناه بـ cURL وJavaScript وPython.
/api/scan-dependencieshttps://www.apipick.comCheck open-source packages against the OSV.dev vulnerability database
packagesarrayمطلوبUp to 50 objects, each with ecosystem, name, and an exact installed version. [{"ecosystem":"npm","name":"lodash","version":"4.17.15"}]
curl -X POST "https://www.apipick.com/api/scan-dependencies" \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"packages": [
{
"ecosystem": "npm",
"name": "lodash",
"version": "4.17.15"
},
{
"ecosystem": "PyPI",
"name": "requests",
"version": "2.19.0"
}
]
}'{
"summary": {
"packages_scanned": 2,
"vulnerable_packages": 2,
"total_vulnerabilities": 8,
"by_severity": {
"critical": 1,
"high": 3,
"medium": 4,
"low": 0,
"none": 0,
"unknown": 0
},
"highest_cvss_score": 9.8
},
"results": [
{
"ecosystem": "npm",
"name": "lodash",
"version": "4.17.15",
"vulnerable": true,
"highest_severity": "HIGH",
"highest_cvss_score": 7.4,
"vulnerability_count": 6,
"vulnerabilities": [
{
"id": "GHSA-35jh-r3h4-6jhm",
"aliases": [
"CVE-2021-23337"
],
"cve": "CVE-2021-23337",
"summary": "Command Injection in lodash",
"severity": "HIGH",
"cvss_score": 7.2,
"cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H",
"cwe_ids": [
"CWE-77"
],
"published": "2021-02-15T00:00:00Z",
"fixed_versions": [
"4.17.21"
],
"advisory_url": "https://osv.dev/vulnerability/GHSA-35jh-r3h4-6jhm"
}
],
"error": null
}
],
"source": "OSV.dev (Google Open Source Vulnerabilities, CC-BY-4.0)",
"credits_used": 5,
"remaining_credits": 95
}مبني لحالات استخدام واقعية
بوابات الإصدار
أوقف عملية البناء متى تجاوزت أي اعتمادية حدًّا معيّنًا من CVSS. الدرجة الرقمية تجعل السياسة مقارنة عددية من سطر واحد بدل مطابقة نصية.
وكلاء البرمجة
دع الوكيل يتحقق من إصدار قبل كتابته في ملف الاعتماديات، ويقترح الإصدار المُصلَح في الرد نفسه.
تدقيق ملفات القفل
أرسل ملف الاعتماديات كاملًا على دفعات من 50 واحصل على ملخص واحد بحسب الخطورة لكل خدمة، دون تشغيل ماسح داخل خط التكامل المستمر.
العناية الواجبة بالموردين
قيِّم قائمة الاعتماديات التي أعلنها طرف ثالث في ضوء النشرات العامة قبل التوقيع، ببيانات يمكنك الاستشهاد بها.
حقول الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
| summary.vulnerable_packages | integer | عدد الحزم المُرسَلة التي لها نشرة أمنية واحدة على الأقل |
| summary.by_severity | object | عدد النشرات موزَّعًا على critical / high / medium / low / none / unknown |
| summary.highest_cvss_score | number | null | أعلى درجة CVSS أساسية في الفحص كله |
| results[].vulnerable | boolean | ما إذا كان لهذا الإصدار نشرة أمنية غير مسحوبة |
| results[].vulnerabilities[].id | string | معرّف نشرة OSV، مثل GHSA-35jh-r3h4-6jhm |
| results[].vulnerabilities[].cve | string | null | معرّف CVE المرادف إن وُجد |
| results[].vulnerabilities[].severity | string | CRITICAL أو HIGH أو MEDIUM أو LOW أو NONE أو UNKNOWN |
| results[].vulnerabilities[].cvss_score | number | null | درجة CVSS v3.1 الأساسية المحسوبة من متجه النشرة |
| results[].vulnerabilities[].cwe_ids | string[] | تصنيفات الضعف CWE الخاصة بالنشرة |
| results[].vulnerabilities[].fixed_versions | string[] | إصدارات هذه الحزمة التي تعالج النشرة |
| results[].error | string | null | يُضبط عند تعذّر فحص هذه الحزمة تحديدًا؛ وتُعاد بقية الحزم كالمعتاد |
| credits_used | integer | الأرصدة المخصومة عن هذا الطلب |
| remaining_credits | integer | الأرصدة المتبقية في حسابك |
حدود المعدل
يُطبَّق التقييد لكل مفتاح API، بنافذة منزلقة مدتها 60 ثانية. عند بلوغ الحد تحصل على رمز 429 نظيف مع ترويسة Retry-After.
20req/min
لكل مفتاح API ولكل نقطة نهاية. نافذة منزلقة مدتها 60 ثانية.
3concurrent
الحد الأقصى للطلبات الجارية المتزامنة لكل مفتاح API.
X-RateLimit-Limitالحد الأقصى للطلبات المسموح بها في الدقيقةX-RateLimit-Remainingالطلبات المتبقية في النافذة الحاليةX-RateLimit-Resetعدد الثواني حتى إعادة ضبط النافذة الحاليةRetry-Afterعدد الثواني التي يجب انتظارها قبل إعادة المحاولة (عند 429 فقط)HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 12
{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded: 20 requests/minute per API key. Retry after 12s.",
"retry_after": 12
}مصدر البيانات والترخيص
تأتي النشرات من OSV.dev، قاعدة بيانات الثغرات المفتوحة من Google، المنشورة بترخيص CC-BY-4.0. تجمع OSV في مخطط واحد قاعدة GitHub Advisory Database وقاعدة ثغرات Go وRustSec وPyPA ومتتبعات الأمن في التوزيعات الكبرى. ونضيف نحن حساب درجة CVSS الأساسية والتلخيص على مستوى كل حزمة.
الأسئلة الشائعة
س: من أين تأتي بيانات الثغرات؟
ج: من OSV.dev، قاعدة بيانات الثغرات المفتوحة من Google. تجمع في مخطط واحد قاعدة GitHub Advisory Database وقاعدة ثغرات Go وRustSec وPyPA ومتتبعات الأمن في التوزيعات، وتنشرها بترخيص CC-BY-4.0. وتتاح النشرات عادةً خلال ساعات من صدورها.
س: كيف تُحسب درجة CVSS؟
ج: تحمل نشرات OSV سلسلة متجه CVSS لا الرقم نفسه. نحسب نحن درجة CVSS v3.1 الأساسية من ذلك المتجه بالمعادلة الرسمية، فتحصل على قيمة يمكنك وضع حد فاصل عليها مباشرة. وحين لا تتضمن النشرة متجه v3 (متجه v4 فقط، أو نشرة منظومة بلا متجه) تكون قيمة cvss_score هي null ويعود severity إلى تصنيف الجهة الناشرة نفسها.
س: هل يمكنني فحص ملف قفل كامل؟
ج: نعم — حلِّله لديك وأرسل ما يصل إلى 50 حزمة في كل طلب. يكلّف الطلب الواحد 5 أرصدة بغضّ النظر عن عدد الحزم، فتكون دفعة الخمسين بواقع 0.1 رصيد للحزمة. وللملفات الأكبر، قسِّمها إلى دفعات من 50.
س: هل يدعم نطاقات الإصدارات؟
ج: لا. أرسل الإصدار المثبَّت بدقة كما يظهر في ملف القفل لديك (4.17.15 لا ^4.17.0). تقارن OSV النطاقات بإصدار محدد لتقرّر ما إذا كان متأثرًا، لذا لا توجد إجابة واحدة لنطاق يُرسَل كمدخل.
س: ماذا يحدث إذا أخفق البحث عن إحدى الحزم؟
ج: يُعاد الفحص على أي حال. تحمل تلك الحزمة حقل error وتُستبعد من أعداد الملخص، بينما تُعاد بقية الحزم كالمعتاد. كما تتضمن الاستجابة packages_failed لتعرف أن الملخص غير مكتمل.