Pemindaian kerentanan dependensi
Periksa hingga 50 dependensi open source ke OSV.dev dalam satu panggilan. Mengembalikan alias CVE, skor dasar CVSS terhitung, pengenal CWE, serta versi persis yang memperbaiki setiap advisory.
Belum punya API key?
Masuk ke akun Anda untuk membuat dan mengelola API key.
Panduan integrasi
Salin snippet, ganti API key kamu, jalankan. Bekerja di HTTP client mana pun — contoh di bawah dalam cURL, JavaScript, dan Python.
/api/scan-dependencieshttps://www.apipick.comCheck open-source packages against the OSV.dev vulnerability database
packagesarraywajibUp 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
}Dibuat untuk Use Case Dunia Nyata
Gerbang rilis
Gagalkan build begitu ada dependensi yang melewati ambang CVSS. Dengan skor numerik, kebijakan cukup satu baris perbandingan angka, bukan pencocokan teks.
Agen pemrograman
Biarkan agen memeriksa sebuah versi sebelum menuliskannya ke manifest, lalu menyarankan versi perbaikannya pada giliran yang sama.
Audit lockfile
Kirim seluruh manifest dalam kelompok 50 dan dapatkan satu ringkasan tingkat keparahan per layanan, tanpa menjalankan pemindai di CI.
Uji tuntas pemasok
Nilai daftar dependensi yang dinyatakan pihak ketiga terhadap advisory publik sebelum menandatangani, dengan data yang bisa Anda rujuk.
Field respons
| Field | Tipe | Deskripsi |
|---|---|---|
| summary.vulnerable_packages | integer | Berapa banyak paket yang dikirim memiliki setidaknya satu advisory |
| summary.by_severity | object | Jumlah advisory menurut critical / high / medium / low / none / unknown |
| summary.highest_cvss_score | number | null | Skor dasar CVSS tertinggi di seluruh pemindaian |
| results[].vulnerable | boolean | Apakah versi paket ini punya advisory yang belum ditarik |
| results[].vulnerabilities[].id | string | ID advisory OSV, mis. GHSA-35jh-r3h4-6jhm |
| results[].vulnerabilities[].cve | string | null | Alias CVE bila ada |
| results[].vulnerabilities[].severity | string | CRITICAL, HIGH, MEDIUM, LOW, NONE, atau UNKNOWN |
| results[].vulnerabilities[].cvss_score | number | null | Skor dasar CVSS v3.1 yang dihitung dari vektor advisory |
| results[].vulnerabilities[].cwe_ids | string[] | Klasifikasi kelemahan CWE untuk advisory tersebut |
| results[].vulnerabilities[].fixed_versions | string[] | Versi paket ini yang menyelesaikan advisory |
| results[].error | string | null | Terisi bila paket itu saja gagal diperiksa; sisanya tetap dikembalikan |
| credits_used | integer | Kredit yang dipotong untuk request ini |
| remaining_credits | integer | Kredit yang tersisa di akun kamu |
Rate limit
Throttling berlaku per API key, jendela geser 60 detik. Jika melewati batas, kamu mendapat 429 yang rapi dengan header Retry-After.
20req/min
Per API key, per endpoint. Jendela geser 60 detik.
3concurrent
Maksimum request bersamaan yang sedang berjalan per API key.
X-RateLimit-LimitJumlah maksimum request yang diizinkan per menitX-RateLimit-RemainingRequest yang tersisa di jendela saat iniX-RateLimit-ResetDetik sampai jendela saat ini di-resetRetry-AfterDetik yang harus ditunggu sebelum mencoba lagi (hanya pada 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
}Sumber data dan lisensi
Advisory berasal dari OSV.dev, basis data kerentanan terbuka milik Google, yang diterbitkan dengan lisensi CC-BY-4.0. OSV menyatukan GitHub Advisory Database, basis data kerentanan Go, RustSec, PyPA, serta pelacak keamanan distribusi besar ke dalam satu skema. Kami menambahkan perhitungan skor dasar CVSS dan ringkasan per paket.
Pertanyaan yang Sering Diajukan
T: Dari mana data kerentanannya berasal?
J: Dari OSV.dev, basis data kerentanan terbuka milik Google. OSV menyatukan GitHub Advisory Database, basis data kerentanan Go, RustSec, PyPA, dan pelacak keamanan distribusi ke dalam satu skema, lalu menerbitkannya dengan lisensi CC-BY-4.0. Advisory umumnya tersedia dalam hitungan jam setelah dipublikasikan.
T: Bagaimana skor CVSS dihitung?
J: Advisory OSV memuat string vektor CVSS, tetapi bukan angkanya. Kami menghitung skor dasar CVSS v3.1 dari vektor itu memakai rumus resmi, sehingga Anda memperoleh nilai yang langsung bisa dijadikan ambang. Bila sebuah advisory tidak punya vektor v3 (hanya v4, atau advisory ekosistem tanpa vektor), cvss_score bernilai null dan severity mengikuti penilaian penerbit advisory itu sendiri.
T: Bisakah saya memindai satu lockfile penuh?
J: Bisa — parse di sisi Anda lalu kirim hingga 50 paket per panggilan. Satu panggilan berbiaya 5 kredit berapa pun jumlah paketnya, jadi satu kelompok 50 paket setara 0,1 kredit per paket. Untuk manifest yang lebih besar, pecah menjadi kelompok 50.
T: Apakah rentang versi didukung?
J: Tidak. Kirim versi persis yang terpasang, sebagaimana tertulis di lockfile Anda (4.17.15, bukan ^4.17.0). OSV mencocokkan rentang dengan versi konkret untuk menentukan apakah versi itu terdampak, sehingga rentang sebagai masukan tidak memiliki jawaban tunggal.
T: Apa yang terjadi bila pencarian satu paket gagal?
J: Pemindaian tetap dikembalikan. Paket tersebut membawa field error dan dikeluarkan dari hitungan ringkasan, sementara paket lain dilaporkan seperti biasa. Respons juga menyetel packages_failed agar Anda tahu ringkasannya tidak lengkap.