Scansione vulnerabilità delle dipendenze
Controlla fino a 50 dipendenze open source su OSV.dev con una sola chiamata. Restituisce alias CVE, un punteggio base CVSS calcolato, identificatori CWE e le versioni esatte che risolvono ciascun avviso.
Non hai una API key?
Accedi al tuo account per creare e gestire le tue API key.
Guida all'integrazione
Copia uno snippet, sostituisci la tua API key, esegui. Funziona con qualsiasi client HTTP — esempi qui sotto in cURL, JavaScript e Python.
/api/scan-dependencieshttps://www.apipick.comCheck open-source packages against the OSV.dev vulnerability database
packagesarrayobbligatorioUp 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
}Costruita per casi d'uso reali
Gate di rilascio
Fai fallire una build quando una dipendenza supera una soglia CVSS. Con un punteggio numerico la policy diventa un confronto su una riga invece di un match testuale.
Agenti di sviluppo
Lascia che un agente verifichi una versione prima di scriverla in un manifest e suggerisca la versione corretta nello stesso turno.
Audit dei lockfile
Invia un intero manifest a blocchi di 50 e ottieni un riepilogo per gravità per ciascun servizio, senza far girare uno scanner in CI.
Due diligence sui fornitori
Valuta l'insieme di dipendenze dichiarato da un terzo alla luce degli avvisi pubblici prima di firmare, con dati che puoi citare.
Campi della risposta
| Campo | Tipo | Descrizione |
|---|---|---|
| summary.vulnerable_packages | integer | Quanti dei pacchetti inviati hanno almeno un avviso |
| summary.by_severity | object | Conteggio degli avvisi per critical / high / medium / low / none / unknown |
| summary.highest_cvss_score | number | null | Punteggio base CVSS più alto dell'intera scansione |
| results[].vulnerable | boolean | Se questa versione del pacchetto ha un avviso non ritirato |
| results[].vulnerabilities[].id | string | Identificativo dell'avviso OSV, ad es. GHSA-35jh-r3h4-6jhm |
| results[].vulnerabilities[].cve | string | null | Alias CVE, quando esiste |
| results[].vulnerabilities[].severity | string | CRITICAL, HIGH, MEDIUM, LOW, NONE o UNKNOWN |
| results[].vulnerabilities[].cvss_score | number | null | Punteggio base CVSS v3.1 calcolato dal vettore dell'avviso |
| results[].vulnerabilities[].cwe_ids | string[] | Classificazioni di debolezza CWE dell'avviso |
| results[].vulnerabilities[].fixed_versions | string[] | Versioni di questo pacchetto che risolvono l'avviso |
| results[].error | string | null | Valorizzato quando quel singolo pacchetto non ha potuto essere verificato; tutti gli altri vengono comunque restituiti |
| credits_used | integer | Crediti scalati per questa richiesta |
| remaining_credits | integer | Crediti rimanenti nel tuo account |
Limiti di frequenza
Il throttling è per API key, con finestra mobile di 60 secondi. Al raggiungimento del limite ricevi un 429 pulito con header Retry-After.
20req/min
Per API key e per endpoint. Finestra mobile di 60 secondi.
3concurrent
Numero massimo di richieste simultanee in corso per API key.
X-RateLimit-LimitNumero massimo di richieste consentite al minutoX-RateLimit-RemainingRichieste rimanenti nella finestra correnteX-RateLimit-ResetSecondi al reset della finestra correnteRetry-AfterSecondi da attendere prima di riprovare (solo in caso di 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
}Fonte dei dati e licenza
Gli avvisi provengono da OSV.dev, il database aperto delle vulnerabilità di Google, pubblicato con licenza CC-BY-4.0. OSV riunisce in un unico schema il GitHub Advisory Database, il database delle vulnerabilità di Go, RustSec, PyPA e i tracker di sicurezza delle principali distribuzioni. Noi aggiungiamo il calcolo del punteggio base CVSS e il riepilogo per pacchetto.
Domande frequenti
D: Da dove provengono i dati sulle vulnerabilità?
R: Da OSV.dev, il database aperto delle vulnerabilità di Google. Riunisce in un unico schema il GitHub Advisory Database, il database delle vulnerabilità di Go, RustSec, PyPA e i tracker di sicurezza delle distribuzioni, e li pubblica con licenza CC-BY-4.0. Gli avvisi sono in genere disponibili entro poche ore dalla pubblicazione.
D: Come viene calcolato il punteggio CVSS?
R: Gli avvisi OSV contengono la stringa del vettore CVSS ma non il numero. Calcoliamo il punteggio base CVSS v3.1 da quel vettore con la formula ufficiale, così ottieni un valore su cui impostare direttamente una soglia. Se un avviso non ha un vettore v3 (solo v4, oppure un avviso di ecosistema che ne è privo), cvss_score è null e severity ricade sulla valutazione dell'editore stesso.
D: Posso analizzare un intero lockfile?
R: Sì: fai il parsing dalla tua parte e invia fino a 50 pacchetti per chiamata. Una chiamata costa 5 crediti indipendentemente da quanti pacchetti contiene, quindi un blocco da 50 equivale a 0,1 crediti per pacchetto. Per manifest più grandi, suddividi in blocchi da 50.
D: Sono supportati gli intervalli di versione?
R: No. Invia la versione esatta installata, così come compare nel tuo lockfile (4.17.15, non ^4.17.0). OSV confronta gli intervalli con una versione concreta per stabilire se è interessata, quindi un intervallo in ingresso non ha una risposta univoca.
D: Cosa succede se la ricerca di un pacchetto fallisce?
R: La scansione viene comunque restituita. Quel pacchetto riporta un campo error ed è escluso dai conteggi del riepilogo, mentre tutti gli altri vengono riportati normalmente. La risposta imposta anche packages_failed per segnalarti che il riepilogo è incompleto.