[ الأمن · سلسلة التوريد ]● 5 أرصدة · 20 طلبًا/دقيقة

فحص ثغرات الاعتماديات API

افحص ما يصل إلى 50 اعتمادية مفتوحة المصدر عبر OSV.dev في طلب واحد. يعيد معرّفات CVE المرادفة، ودرجة CVSS أساسية محسوبة، وتصنيفات CWE، والإصدارات الدقيقة التي تعالج كل نشرة أمنية.

نشرات OSV.devمُقيَّمة بـ CVSS v3.113 منظومة برمجية
auth · x-api-key

لا تملك مفتاح API؟

سجّل الدخول إلى حسابك لإنشاء وإدارة مفاتيح API.

[ 02 · integrate ]

دليل التكامل

انسخ المقتطف، استبدل مفتاح API الخاص بك، ثم شغّله. يعمل مع أي عميل HTTP — أمثلة أدناه بـ cURL وJavaScript وPython.

spec
POST/api/scan-dependencies
base
https://www.apipick.com

Check 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"
    }
  ]
}'
● 200 · الاستجابة
{
  "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_packagesintegerعدد الحزم المُرسَلة التي لها نشرة أمنية واحدة على الأقل
summary.by_severityobjectعدد النشرات موزَّعًا على critical / high / medium / low / none / unknown
summary.highest_cvss_scorenumber | nullأعلى درجة CVSS أساسية في الفحص كله
results[].vulnerablebooleanما إذا كان لهذا الإصدار نشرة أمنية غير مسحوبة
results[].vulnerabilities[].idstringمعرّف نشرة OSV، مثل GHSA-35jh-r3h4-6jhm
results[].vulnerabilities[].cvestring | nullمعرّف CVE المرادف إن وُجد
results[].vulnerabilities[].severitystringCRITICAL أو HIGH أو MEDIUM أو LOW أو NONE أو UNKNOWN
results[].vulnerabilities[].cvss_scorenumber | nullدرجة CVSS v3.1 الأساسية المحسوبة من متجه النشرة
results[].vulnerabilities[].cwe_idsstring[]تصنيفات الضعف CWE الخاصة بالنشرة
results[].vulnerabilities[].fixed_versionsstring[]إصدارات هذه الحزمة التي تعالج النشرة
results[].errorstring | nullيُضبط عند تعذّر فحص هذه الحزمة تحديدًا؛ وتُعاد بقية الحزم كالمعتاد
credits_usedintegerالأرصدة المخصومة عن هذا الطلب
remaining_creditsintegerالأرصدة المتبقية في حسابك
[ 03 · limits ]

حدود المعدل

يُطبَّق التقييد لكل مفتاح API، بنافذة منزلقة مدتها 60 ثانية. عند بلوغ الحد تحصل على رمز 429 نظيف مع ترويسة Retry-After.

معدل الطلبات

20req/min

لكل مفتاح API ولكل نقطة نهاية. نافذة منزلقة مدتها 60 ثانية.

التزامن

3concurrent

الحد الأقصى للطلبات الجارية المتزامنة لكل مفتاح API.

ترويسات الاستجابة
X-RateLimit-Limitالحد الأقصى للطلبات المسموح بها في الدقيقة
X-RateLimit-Remainingالطلبات المتبقية في النافذة الحالية
X-RateLimit-Resetعدد الثواني حتى إعادة ضبط النافذة الحالية
Retry-Afterعدد الثواني التي يجب انتظارها قبل إعادة المحاولة (عند 429 فقط)
● 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 لتعرف أن الملخص غير مكتمل.