Skanowanie podatności zależności
Sprawdź do 50 zależności open source w OSV.dev jednym wywołaniem. Zwraca aliasy CVE, wyliczoną ocenę bazową CVSS, identyfikatory CWE oraz dokładne wersje usuwające każdy komunikat bezpieczeństwa.
Nie masz klucza API?
Zaloguj się na swoje konto, aby tworzyć klucze API i nimi zarządzać.
Przewodnik integracji
Skopiuj fragment kodu, podmień swój klucz API, uruchom. Działa w dowolnym kliencie HTTP — przykłady poniżej w cURL, JavaScript i Pythonie.
/api/scan-dependencieshttps://www.apipick.comCheck open-source packages against the OSV.dev vulnerability database
packagesarraywymaganeUp 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
}Stworzone do rzeczywistych przypadków użycia
Bramki wydania
Przerwij budowanie, gdy dowolna zależność przekroczy próg CVSS. Ocena liczbowa sprawia, że polityka to jedno porównanie liczb zamiast dopasowywania tekstu.
Agenci programistyczni
Pozwól agentowi sprawdzić wersję, zanim wpisze ją do manifestu, i zaproponować poprawioną wersję w tej samej odpowiedzi.
Audyt plików lock
Prześlij cały manifest partiami po 50 i uzyskaj jedno podsumowanie według istotności dla każdej usługi, bez uruchamiania skanera w CI.
Due diligence dostawców
Oceń zadeklarowany przez kontrahenta zestaw zależności na podstawie publicznych komunikatów przed podpisaniem umowy — na danych, które możesz przytoczyć.
Pola odpowiedzi
| Pole | Typ | Opis |
|---|---|---|
| summary.vulnerable_packages | integer | Ile z przesłanych pakietów ma co najmniej jeden komunikat |
| summary.by_severity | object | Liczba komunikatów w podziale na critical / high / medium / low / none / unknown |
| summary.highest_cvss_score | number | null | Najwyższa ocena bazowa CVSS w całym skanowaniu |
| results[].vulnerable | boolean | Czy ta wersja pakietu ma niewycofany komunikat |
| results[].vulnerabilities[].id | string | Identyfikator komunikatu OSV, np. GHSA-35jh-r3h4-6jhm |
| results[].vulnerabilities[].cve | string | null | Alias CVE, jeśli istnieje |
| results[].vulnerabilities[].severity | string | CRITICAL, HIGH, MEDIUM, LOW, NONE lub UNKNOWN |
| results[].vulnerabilities[].cvss_score | number | null | Ocena bazowa CVSS v3.1 wyliczona z wektora z komunikatu |
| results[].vulnerabilities[].cwe_ids | string[] | Klasyfikacje słabości CWE dla komunikatu |
| results[].vulnerabilities[].fixed_versions | string[] | Wersje tego pakietu usuwające problem opisany w komunikacie |
| results[].error | string | null | Ustawiane, gdy tego jednego pakietu nie udało się sprawdzić; pozostałe i tak są zwracane |
| credits_used | integer | Kredyty odjęte za to żądanie |
| remaining_credits | integer | Kredyty pozostałe na Twoim koncie |
Limity zapytań
Ograniczanie działa per klucz API, w przesuwnym oknie 60 sekund. Po przekroczeniu limitu otrzymasz czyste 429 z nagłówkiem Retry-After.
20req/min
Per klucz API, per endpoint. Przesuwne okno 60 sekund.
3concurrent
Maksymalna liczba jednoczesnych żądań w toku na klucz API.
X-RateLimit-LimitMaksymalna dozwolona liczba żądań na minutęX-RateLimit-RemainingPozostała liczba żądań w bieżącym oknieX-RateLimit-ResetSekundy do zresetowania bieżącego oknaRetry-AfterSekundy oczekiwania przed ponowieniem (tylko przy 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
}Źródło danych i licencja
Komunikaty pochodzą z OSV.dev, otwartej bazy podatności Google, publikowanej na licencji CC-BY-4.0. OSV łączy w jeden schemat GitHub Advisory Database, bazę podatności Go, RustSec, PyPA oraz trackery bezpieczeństwa głównych dystrybucji. My dokładamy wyliczenie oceny bazowej CVSS i podsumowanie w podziale na pakiety.
Najczęściej zadawane pytania
P: Skąd pochodzą dane o podatnościach?
O: Z OSV.dev, otwartej bazy podatności Google. Łączy ona w jeden schemat GitHub Advisory Database, bazę podatności Go, RustSec, PyPA oraz trackery bezpieczeństwa dystrybucji i publikuje je na licencji CC-BY-4.0. Komunikaty są zwykle dostępne w ciągu kilku godzin od publikacji.
P: Jak wyliczana jest ocena CVSS?
O: Komunikaty OSV zawierają ciąg wektora CVSS, ale nie samą liczbę. Wyliczamy ocenę bazową CVSS v3.1 z tego wektora według oficjalnego wzoru, dzięki czemu otrzymujesz wartość, na której możesz od razu ustawić próg. Gdy komunikat nie ma wektora v3 (tylko v4 albo komunikat ekosystemowy bez wektora), cvss_score ma wartość null, a severity korzysta z oceny samego wydawcy.
P: Czy mogę przeskanować cały plik lock?
O: Tak — sparsuj go po swojej stronie i wysyłaj do 50 pakietów na wywołanie. Jedno wywołanie kosztuje 5 kredytów niezależnie od liczby pakietów, więc partia 50 sztuk wychodzi po 0,1 kredytu za pakiet. Większe manifesty dziel na partie po 50.
P: Czy obsługiwane są zakresy wersji?
O: Nie. Wysyłaj dokładnie zainstalowaną wersję w takiej postaci, w jakiej występuje w pliku lock (4.17.15, a nie ^4.17.0). OSV porównuje zakresy z konkretną wersją, aby ustalić, czy jest objęta problemem, więc zakres na wejściu nie ma jednej odpowiedzi.
P: Co się stanie, jeśli zapytanie o jeden pakiet się nie powiedzie?
O: Skanowanie i tak zwróci wynik. Ten pakiet otrzyma pole error i zostanie wyłączony z podsumowania, a wszystkie pozostałe będą raportowane normalnie. Odpowiedź ustawia też packages_failed, żebyś wiedział, że podsumowanie jest niepełne.