js项目依赖安全扫描与sbom生成需结合npm audit、npm ls、syft和trivy:npm audit快速识别高危漏洞;npm ls导出依赖树;syft生成标准化sbom;trivy实现深度漏洞扫描与sbom分析,ci中应设为门禁。

JS 项目中做 npm 依赖安全扫描和生成 SBOM(Software Bill of Materials),核心是利用成熟工具链自动识别、分析和输出依赖关系与风险信息,不需要手动维护清单或逐个查漏洞。
用 npm audit 快速做基础安全扫描
这是 Node.js 自带的轻量级方案,适合日常开发阶段快速发现已知高危漏洞:
- 运行
npm audit查看当前项目中存在哪些已知漏洞(基于 npm 官方漏洞数据库) - 加
--audit-level high只显示 high 及以上严重级别的问题 - 用
npm audit fix自动修复可兼容升级的漏洞;加--force尝试强制修复(注意可能破坏兼容性) - CI/CD 中建议加上
npm audit --audit-level critical --production,只检查生产依赖里的严重问题
用 npm ls + --json 或 tree 导出依赖结构
这是生成 SBOM 的原始数据来源之一,能拿到完整的依赖树(含嵌套依赖):
-
npm ls --all --json > deps.json输出标准 JSON 格式的依赖树,包含 name、version、dependencies 等字段 -
npm ls --prod --depth=0只列出直接生产依赖,适合人工核对 - 注意:
npm ls不包含许可证、作者、CVE 关联等元数据,需配合其他工具补全
用 syft 生成符合 SPDX / CycloneDX 标准的 SBOM
syft 是 CNCF 孵化项目,专为容器和语言生态生成标准化 SBOM,对 JS 生态支持良好:
- 安装:
brew install syft(Mac)或从 GitHub Releases 下载二进制 - 生成 CycloneDX(推荐,兼容性好):
syft . -o cyclonedx-json > sbom.cdx.json - 生成 SPDX:
syft . -o spdx-json > sbom.spdx.json - 它会自动识别
package-lock.json、node_modules,提取每个包的版本、许可证、哈希值、上游来源等,并关联已知 CVE(需联网)
用 trivy 同时做漏洞扫描 + SBOM 分析
trivy 不仅能扫漏洞,还能把 SBOM 当输入来深度分析,适合合规审计场景:
- 直接扫描项目:
trivy fs --scanners vuln,config,secret .(vuln 扫描器会自动构建依赖图) - 先生成 SBOM 再扫描:
trivy sbom sbom.cdx.json --format table,输出更清晰的漏洞映射关系 - 支持输出 SARIF 格式,方便集成到 GitHub Code Scanning 等平台
- 比
npm audit覆盖更多间接依赖和历史版本漏洞(依赖 Trivy 自建数据库 + OSV + NVD)
不复杂但容易忽略的是:SBOM 必须随每次构建生成并存档,且要确保基于 package-lock.json(而非 node_modules)生成,才能保证可重现性。安全扫描最好在 CI 流程里设为门禁,失败时阻断发布。











