[ bảo mật · chuỗi cung ứng ]● 5 tín dụng · 20 yêu cầu/phút

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.

Cảnh báo từ OSV.devChấm điểm theo CVSS v3.113 hệ sinh thái
auth · x-api-key

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.

[ 02 · integrate ]

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.

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

Check open-source packages against the OSV.dev vulnerability database

tham số
packagesarraybắt buộc

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 · phản hồi
{
  "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ườngKiểuMô tả
summary.vulnerable_packagesintegerBao nhiêu gói đã gửi có ít nhất một cảnh báo
summary.by_severityobjectSố lượng cảnh báo theo critical / high / medium / low / none / unknown
summary.highest_cvss_scorenumber | nullĐiểm cơ sở CVSS cao nhất trong toàn bộ lần quét
results[].vulnerablebooleanPhiê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[].idstringMã cảnh báo OSV, ví dụ GHSA-35jh-r3h4-6jhm
results[].vulnerabilities[].cvestring | nullMã CVE tương ứng, nếu có
results[].vulnerabilities[].severitystringCRITICAL, HIGH, MEDIUM, LOW, NONE hoặc UNKNOWN
results[].vulnerabilities[].cvss_scorenumber | nullĐiểm cơ sở CVSS v3.1 được tính từ vector trong cảnh báo
results[].vulnerabilities[].cwe_idsstring[]Phân loại điểm yếu CWE của cảnh báo
results[].vulnerabilities[].fixed_versionsstring[]Các phiên bản của gói này giúp khắc phục cảnh báo
results[].errorstring | 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_usedintegerCredit bị trừ cho request này
remaining_creditsintegerCredit còn lại trong tài khoản của bạn
[ 03 · limits ]

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.

tốc độ request

20req/min

Theo từng API key, từng endpoint. Cửa sổ trượt 60 giây.

đồng thời

3concurrent

Số request đang chạy tối đa đồng thời cho mỗi API key.

header phản hồi
X-RateLimit-LimitSố request tối đa cho phép mỗi phút
X-RateLimit-RemainingSố request còn lại trong cửa sổ hiện tại
X-RateLimit-ResetSố giây cho đến khi cửa sổ hiện tại được đặt lại
Retry-AfterSố giây cần chờ trước khi thử lại (chỉ khi 429)
● 429 · quá nhiều request
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 đủ.