Quét lỗ hổng phụ thuộc API
Kiểm tra tối đa 50 phụ thuộc mã nguồn mở trên OSV.dev chỉ trong một lệnh gọi. Trả về mã CVE tương ứng, điểm cơ sở CVSS đã tính, mã CWE và chính xác các phiên bản khắc phục từng cảnh báo.
Chưa có API key?
Đăng nhập vào tài khoản để tạo và quản lý API key của bạn.
Hướng dẫn tích hợp
Sao chép một đoạn mã, thay API key của bạn, chạy. Hoạt động với mọi HTTP client — các ví dụ bên dưới bằng cURL, JavaScript và Python.
/api/scan-dependencieshttps://www.apipick.comCheck open-source packages against the OSV.dev vulnerability database
packagesarraybắt buộcUp 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
}Xây dựng cho các trường hợp sử dụng thực tế
Chặn phát hành
Cho bản dựng thất bại ngay khi một phụ thuộc vượt ngưỡng CVSS. Có điểm số dạng số, chính sách chỉ còn là một dòng so sánh số thay vì đối chiếu chuỗi.
Tác tử lập trình
Để tác tử kiểm tra một phiên bản trước khi ghi vào tệp khai báo phụ thuộc, rồi đề xuất luôn phiên bản đã khắc phục trong cùng lượt trả lời.
Kiểm toán lockfile
Gửi toàn bộ tệp khai báo theo từng lô 50 và nhận một bản tổng hợp theo mức nghiêm trọng cho mỗi dịch vụ, không cần chạy trình quét trong CI.
Thẩm định nhà cung cấp
Chấm điểm danh sách phụ thuộc do bên thứ ba khai báo dựa trên các cảnh báo công khai trước khi ký kết, bằng dữ liệu bạn có thể trích dẫn.
Các trường phản hồi
| Trường | Kiểu | Mô tả |
|---|---|---|
| summary.vulnerable_packages | integer | Bao nhiêu gói đã gửi có ít nhất một cảnh báo |
| summary.by_severity | object | Số lượng cảnh báo theo critical / high / medium / low / none / unknown |
| summary.highest_cvss_score | number | null | Điểm cơ sở CVSS cao nhất trong toàn bộ lần quét |
| results[].vulnerable | boolean | Phiên bản gói này có cảnh báo nào chưa bị thu hồi hay không |
| results[].vulnerabilities[].id | string | Mã cảnh báo OSV, ví dụ GHSA-35jh-r3h4-6jhm |
| results[].vulnerabilities[].cve | string | null | Mã CVE tương ứng, nếu có |
| results[].vulnerabilities[].severity | string | CRITICAL, HIGH, MEDIUM, LOW, NONE hoặc UNKNOWN |
| results[].vulnerabilities[].cvss_score | number | null | Điểm cơ sở CVSS v3.1 được tính từ vector trong cảnh báo |
| results[].vulnerabilities[].cwe_ids | string[] | Phân loại điểm yếu CWE của cảnh báo |
| results[].vulnerabilities[].fixed_versions | string[] | Các phiên bản của gói này giúp khắc phục cảnh báo |
| results[].error | string | null | Được đặt khi riêng gói đó không kiểm tra được; các gói còn lại vẫn được trả về |
| credits_used | integer | Credit bị trừ cho request này |
| remaining_credits | integer | Credit còn lại trong tài khoản của bạn |
Giới hạn tần suất
Giới hạn tốc độ tính theo từng API key, cửa sổ trượt 60 giây. Vượt giới hạn, bạn nhận được phản hồi 429 sạch sẽ kèm header Retry-After.
20req/min
Theo từng API key, từng endpoint. Cửa sổ trượt 60 giây.
3concurrent
Số request đang chạy tối đa đồng thời cho mỗi API key.
X-RateLimit-LimitSố request tối đa cho phép mỗi phútX-RateLimit-RemainingSố request còn lại trong cửa sổ hiện tạiX-RateLimit-ResetSố giây cho đến khi cửa sổ hiện tại được đặt lạiRetry-AfterSố giây cần chờ trước khi thử lại (chỉ khi 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
}Nguồn dữ liệu và giấy phép
Cảnh báo lấy từ OSV.dev, cơ sở dữ liệu lỗ hổng mở của Google, phát hành theo giấy phép CC-BY-4.0. OSV hợp nhất GitHub Advisory Database, cơ sở dữ liệu lỗ hổng của Go, RustSec, PyPA cùng các hệ thống theo dõi bảo mật của những bản phân phối lớn vào một lược đồ duy nhất. Chúng tôi bổ sung phần tính điểm cơ sở CVSS và bản tổng hợp theo từng gói.
Câu hỏi thường gặp
Hỏi: Dữ liệu lỗ hổng lấy từ đâu?
Đáp: Từ OSV.dev, cơ sở dữ liệu lỗ hổng mở của Google. Nó hợp nhất GitHub Advisory Database, cơ sở dữ liệu lỗ hổng của Go, RustSec, PyPA và các hệ thống theo dõi bảo mật của những bản phân phối vào một lược đồ, rồi phát hành theo CC-BY-4.0. Cảnh báo thường có mặt trong vòng vài giờ sau khi được công bố.
Hỏi: Điểm CVSS được tính như thế nào?
Đáp: Cảnh báo của OSV có chuỗi vector CVSS nhưng không có con số. Chúng tôi tính điểm cơ sở CVSS v3.1 từ vector đó theo công thức chính thức, nên bạn nhận được một giá trị có thể đặt ngưỡng ngay. Khi cảnh báo không có vector v3 (chỉ có v4, hoặc cảnh báo hệ sinh thái không kèm vector), cvss_score sẽ là null và severity quay về mức đánh giá của chính đơn vị phát hành.
Hỏi: Tôi có thể quét toàn bộ một lockfile không?
Đáp: Có — hãy phân tích tệp ở phía bạn rồi gửi tối đa 50 gói mỗi lệnh gọi. Một lệnh gọi tốn 5 tín dụng bất kể chứa bao nhiêu gói, nên lô 50 gói chỉ tương đương 0,1 tín dụng mỗi gói. Với tệp khai báo lớn hơn, hãy chia thành các lô 50.
Hỏi: Có hỗ trợ khoảng phiên bản không?
Đáp: Không. Hãy gửi đúng phiên bản đã cài, theo cách nó xuất hiện trong lockfile của bạn (4.17.15, không phải ^4.17.0). OSV đối chiếu các khoảng với một phiên bản cụ thể để quyết định phiên bản đó có bị ảnh hưởng hay không, nên một khoảng ở đầu vào không có câu trả lời duy nhất.
Hỏi: Nếu việc tra cứu một gói thất bại thì sao?
Đáp: Kết quả quét vẫn được trả về. Gói đó mang thêm trường error và bị loại khỏi các số liệu tổng hợp, còn mọi gói khác vẫn được báo cáo bình thường. Phản hồi cũng đặt packages_failed để bạn biết bản tổng hợp chưa đầy đủ.