[ 安全 · 供应链 ]● 5 积分 · 20 次/分钟

依赖 漏洞扫描 API

一次调用即可对最多 50 个开源依赖执行 OSV.dev 检查,返回 CVE 编号、计算得出的 CVSS 基础分、CWE 分类,以及修复每条公告的确切版本号。

OSV.dev 漏洞公告CVSS v3.1 评分13 个生态
auth · x-api-key

还没有 API 密钥?

登录账户以创建和管理您的 API 密钥。

[ 02 · integrate ]

集成指南

复制代码片段,替换你的 API 密钥,运行即可。适用于任何 HTTP 客户端——下方提供 cURL、JavaScript 和 Python 示例。

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

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

参数
packagesarray必填

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 · 响应
{
  "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
}

为真实场景而生

🚦

发布卡点

当任一依赖超过设定的 CVSS 阈值时中断构建。有了数值分数,策略就是一行数值比较,而不必去匹配字符串。

🤖

编码智能体

让智能体在把某个版本写进依赖清单之前先行核查,并在同一轮对话中给出应升级到的修复版本。

📋

Lockfile 审计

把整份依赖清单按 50 个一批提交,为每个服务得到一份按严重级别汇总的报告,无需在 CI 中另跑扫描器。

🔍

供应商尽职调查

在签约前用可溯源的公开漏洞数据,对第三方申报的依赖清单进行风险评分。

响应字段

字段类型说明
summary.vulnerable_packagesinteger所提交的依赖包中,至少命中一条漏洞公告的数量
summary.by_severityobject按 critical / high / medium / low / none / unknown 分级的公告数量
summary.highest_cvss_scorenumber | null本次扫描中出现的最高 CVSS 基础分
results[].vulnerableboolean该版本是否存在未撤回的漏洞公告
results[].vulnerabilities[].idstringOSV 公告编号,例如 GHSA-35jh-r3h4-6jhm
results[].vulnerabilities[].cvestring | null对应的 CVE 编号(若存在)
results[].vulnerabilities[].severitystringCRITICAL、HIGH、MEDIUM、LOW、NONE 或 UNKNOWN
results[].vulnerabilities[].cvss_scorenumber | null依据公告中的向量串计算出的 CVSS v3.1 基础分
results[].vulnerabilities[].cwe_idsstring[]该公告对应的 CWE 弱点分类
results[].vulnerabilities[].fixed_versionsstring[]可修复该公告的本包版本
results[].errorstring | null该依赖单独查询失败时出现;其余依赖仍会正常返回
credits_usedinteger本次请求扣除的积分
remaining_creditsinteger你账户中剩余的积分
[ 03 · limits ]

速率限制

限流按 API 密钥计,采用 60 秒滑动窗口。触发限制时会返回干净的 429,并带 Retry-After 响应头。

请求速率

20req/min

按 API 密钥、按端点计。60 秒滑动窗口。

并发

3concurrent

每个 API 密钥的最大同时进行中请求数。

响应头
X-RateLimit-Limit每分钟允许的最大请求数
X-RateLimit-Remaining当前窗口内剩余的请求数
X-RateLimit-Reset当前窗口重置前的秒数
Retry-After重试前需等待的秒数(仅在 429 时)
● 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
}

数据来源与授权

漏洞公告来自 Google 的开源漏洞数据库 OSV.dev,以 CC-BY-4.0 协议发布。OSV 把 GitHub Advisory Database、Go 漏洞库、RustSec、PyPA 以及各主流发行版的安全跟踪库统一到同一套 schema 中。我们在此基础上补充了 CVSS 基础分计算与按包汇总。

常见问题

问: 漏洞数据来自哪里?

答: 来自 Google 的开源漏洞数据库 OSV.dev。它把 GitHub Advisory Database、Go 漏洞库、RustSec、PyPA 以及各发行版的安全跟踪库汇总为同一套 schema,并以 CC-BY-4.0 协议发布。新公告通常在发布后数小时内即可查到。

问: CVSS 分数是怎么算出来的?

答: OSV 公告只带 CVSS 向量串,不带数值。我们按官方公式从该向量计算 CVSS v3.1 基础分,因此你拿到的是可以直接用来设阈值的数字。若某条公告没有 v3 向量(只有 v4,或某些生态公告本身未提供),cvss_score 为 null,severity 则回退到发布方自己给出的评级。

问: 可以扫描整个 lockfile 吗?

答: 可以 —— 在你这边解析后,每次最多提交 50 个包。无论一次带多少个包,单次调用都是 5 积分,因此 50 个一批相当于每个包 0.1 积分。依赖更多时按 50 个一批拆分即可。

问: 支持版本范围吗?

答: 不支持。请按 lockfile 中的写法提交确切的已安装版本(4.17.15,而不是 ^4.17.0)。OSV 是拿具体版本去比对受影响范围来判定的,因此传入一个范围本身并没有唯一答案。

问: 如果其中一个包查询失败会怎样?

答: 扫描照常返回结果。该包会带上 error 字段并从汇总计数中排除,其余依赖一切照常。响应还会带上 packages_failed,让你知道这份汇总并不完整。