สแกนช่องโหว่ ของ dependency API
ตรวจสอบ dependency โอเพนซอร์สได้สูงสุด 50 รายการกับ OSV.dev ในการเรียกครั้งเดียว คืนค่ารหัส CVE ที่เกี่ยวข้อง คะแนนพื้นฐาน CVSS ที่คำนวณแล้ว รหัส CWE และเวอร์ชันที่แก้ไขคำเตือนแต่ละรายการอย่างแม่นยำ
ยังไม่มี API Key?
เข้าสู่ระบบบัญชีของคุณเพื่อสร้างและจัดการ API Key
คู่มือการผสานรวม
คัดลอกสนิปเพ็ต แทนที่ API key ของคุณ แล้วรัน ใช้ได้กับ HTTP client ทุกตัว — ตัวอย่างด้านล่างเป็น 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
}สร้างมาสำหรับกรณีการใช้งานจริง
การกั้นก่อนปล่อยเวอร์ชัน
ให้การบิลด์ล้มเหลวทันทีที่ dependency ใดข้ามเกณฑ์ CVSS เมื่อมีคะแนนเป็นตัวเลข นโยบายก็เหลือเพียงการเปรียบเทียบตัวเลขบรรทัดเดียว แทนการจับคู่ข้อความ
เอเจนต์เขียนโค้ด
ให้เอเจนต์ตรวจสอบเวอร์ชันก่อนเขียนลงในไฟล์ประกาศ dependency แล้วเสนอเวอร์ชันที่แก้ไขแล้วในคำตอบเดียวกัน
การตรวจสอบ lockfile
ส่งไฟล์ประกาศทั้งไฟล์เป็นชุดละ 50 รายการ แล้วรับสรุปตามระดับความรุนแรงหนึ่งชุดต่อหนึ่งบริการ โดยไม่ต้องรันตัวสแกนใน CI
การตรวจสอบสถานะผู้ขาย
ประเมินรายการ dependency ที่คู่สัญญาแจ้งไว้เทียบกับคำเตือนสาธารณะก่อนลงนาม ด้วยข้อมูลที่คุณอ้างอิงได้
ฟิลด์ในผลลัพธ์
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
| 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 | เครดิตที่เหลือในบัญชีของคุณ |
Rate limit
การจำกัดอัตราเป็นแบบต่อ API key ในหน้าต่างเลื่อน 60 วินาที เมื่อถึงขีดจำกัดคุณจะได้ 429 ที่สะอาดพร้อม header Retry-After
20req/min
ต่อ API key ต่อ endpoint หน้าต่างเลื่อน 60 วินาที
3concurrent
จำนวนคำขอที่กำลังดำเนินการพร้อมกันได้สูงสุดต่อ API key
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 ฐานข้อมูลช่องโหว่แบบเปิดของกูเกิล ซึ่งเผยแพร่ภายใต้ 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 จะย้อนไปใช้ระดับที่ผู้เผยแพร่กำหนดเอง
ถาม: สแกน lockfile ทั้งไฟล์ได้ไหม
ตอบ: ได้ — แยกวิเคราะห์ไฟล์ที่ฝั่งคุณแล้วส่งได้สูงสุด 50 แพ็กเกจต่อการเรียกหนึ่งครั้ง การเรียกหนึ่งครั้งคิด 5 เครดิตไม่ว่าจะมีกี่แพ็กเกจ ดังนั้นชุดละ 50 รายการจึงเท่ากับ 0.1 เครดิตต่อแพ็กเกจ หากไฟล์ใหญ่กว่านั้นให้แบ่งเป็นชุดละ 50
ถาม: รองรับช่วงเวอร์ชันหรือไม่
ตอบ: ไม่รองรับ กรุณาส่งเวอร์ชันที่ติดตั้งจริงตามที่ปรากฏใน lockfile ของคุณ (4.17.15 ไม่ใช่ ^4.17.0) OSV เทียบช่วงเวอร์ชันกับเวอร์ชันที่ระบุชัดเพื่อตัดสินว่าได้รับผลกระทบหรือไม่ การส่งช่วงเข้ามาจึงไม่มีคำตอบเดียวที่แน่นอน
ถาม: ถ้าการค้นหาแพ็กเกจหนึ่งล้มเหลวจะเกิดอะไรขึ้น
ตอบ: ผลการสแกนยังคืนค่าตามปกติ แพ็กเกจนั้นจะมีฟิลด์ error และถูกตัดออกจากตัวเลขสรุป ส่วนแพ็กเกจอื่นทั้งหมดยังรายงานตามปกติ นอกจากนี้ผลลัพธ์จะตั้งค่า packages_failed เพื่อให้คุณทราบว่าบทสรุปยังไม่ครบถ้วน