डिपेंडेंसी भेद्यता स्कैन API
एक ही कॉल में 50 तक ओपन-सोर्स डिपेंडेंसी की जाँच OSV.dev पर करें। CVE उपनाम, गणना किया गया CVSS बेस स्कोर, CWE पहचानकर्ता और हर एडवाइज़री को ठीक करने वाले सटीक संस्करण लौटाता है।
API key नहीं है?
अपनी API keys बनाने और मैनेज करने के लिए अपने खाते में साइन इन करें।
इंटीग्रेशन गाइड
एक snippet कॉपी करें, अपनी API key बदलें, रन करें। किसी भी 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-50 के बैच में भेजें और CI में स्कैनर चलाए बिना हर सेवा के लिए गंभीरता-वार एक सारांश पाएँ।
विक्रेता ड्यू डिलिजेंस
अनुबंध पर हस्ताक्षर से पहले किसी तीसरे पक्ष द्वारा घोषित डिपेंडेंसी सूची को सार्वजनिक एडवाइज़री के आधार पर आँकें — ऐसे डेटा से जिसका आप संदर्भ दे सकें।
प्रतिक्रिया फ़ील्ड
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
| 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 | इस request के लिए काटे गए credits |
| remaining_credits | integer | आपके अकाउंट में शेष credits |
Rate limits
थ्रॉटलिंग प्रति API key है, 60-सेकंड की स्लाइडिंग विंडो। लिमिट पार करने पर आपको Retry-After हेडर के साथ साफ़ 429 मिलता है।
20req/min
प्रति API key, प्रति endpoint। 60-सेकंड की स्लाइडिंग विंडो।
3concurrent
प्रति API key अधिकतम एक साथ चल रहे requests।
X-RateLimit-Limitप्रति मिनट अनुमत अधिकतम requestsX-RateLimit-Remainingमौजूदा विंडो में शेष requestsX-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 से आती हैं, जो CC-BY-4.0 के अंतर्गत प्रकाशित है। OSV, GitHub Advisory Database, Go भेद्यता डेटाबेस, RustSec, PyPA और प्रमुख डिस्ट्रीब्यूशनों के सुरक्षा ट्रैकरों को एक ही स्कीमा में समेटता है। हम इसमें CVSS बेस स्कोर की गणना और पैकेज-वार सारांश जोड़ते हैं।
अक्सर पूछे जाने वाले प्रश्न
प्र: भेद्यता डेटा कहाँ से आता है?
उ: गूगल के खुले भेद्यता डेटाबेस OSV.dev से। यह GitHub Advisory Database, Go भेद्यता डेटाबेस, RustSec, PyPA और डिस्ट्रीब्यूशनों के सुरक्षा ट्रैकरों को एक स्कीमा में जोड़कर CC-BY-4.0 के अंतर्गत प्रकाशित करता है। एडवाइज़री आम तौर पर प्रकाशन के कुछ ही घंटों में उपलब्ध हो जाती हैं।
प्र: CVSS स्कोर की गणना कैसे होती है?
उ: OSV एडवाइज़री में CVSS वेक्टर स्ट्रिंग होती है, संख्या नहीं। हम उसी वेक्टर से आधिकारिक सूत्र द्वारा CVSS v3.1 बेस स्कोर निकालते हैं, ताकि आपको ऐसा मान मिले जिस पर सीधे सीमा तय की जा सके। जहाँ किसी एडवाइज़री में v3 वेक्टर नहीं होता (केवल v4, या बिना वेक्टर वाली इकोसिस्टम एडवाइज़री), वहाँ cvss_score null रहता है और severity प्रकाशक की अपनी रेटिंग पर लौट आता है।
प्र: क्या मैं पूरी लॉकफ़ाइल स्कैन कर सकता हूँ?
उ: हाँ — उसे अपनी ओर से पार्स करें और प्रति कॉल 50 तक पैकेज भेजें। पैकेजों की संख्या चाहे जो हो, एक कॉल 5 क्रेडिट की होती है, इसलिए 50 का बैच प्रति पैकेज 0.1 क्रेडिट पड़ता है। बड़े मैनिफ़ेस्ट के लिए 50-50 के बैच में बाँट लें।
प्र: क्या संस्करण-श्रेणियाँ समर्थित हैं?
उ: नहीं। जैसा आपकी लॉकफ़ाइल में दर्ज है, ठीक वही इंस्टॉल किया गया संस्करण भेजें (^4.17.0 नहीं, 4.17.15)। OSV यह तय करने के लिए कि कोई संस्करण प्रभावित है या नहीं, श्रेणियों की तुलना एक ठोस संस्करण से करता है, इसलिए इनपुट में दी गई श्रेणी का कोई एक उत्तर नहीं होता।
प्र: यदि किसी एक पैकेज की क्वेरी विफल हो जाए तो क्या होगा?
उ: स्कैन फिर भी लौटता है। उस पैकेज पर error फ़ील्ड आ जाता है और वह सारांश की गणना से बाहर रहता है, जबकि बाकी सभी पैकेज सामान्य रूप से रिपोर्ट होते हैं। प्रतिक्रिया में packages_failed भी सेट होता है ताकि आपको पता चले कि सारांश अधूरा है।