依赖项扫描

使用依赖项列表查看项目或群组的依赖项和有关这些依赖项的关键详细信息,包括它们的已知漏洞。它是项目中依赖项的集合,包括现有的和新的发现。该信息有时被称为软件物料清单、SBOM 或 BOM。

先决条件

要列出项目的依赖项,SBOM 文档必须:

  • 需符合 CycloneDX 规范的 1.4、1.5 或 1.6 版本。
  • 作为 CI/CD 产物报告从默认分支上的成功流水线上传。
note 尽管这不是填充依赖项列表所必需的,但 SBOM 文档必须包含并符合 GitLab CycloneDX 属性分类法,以提供某些属性并启用某些安全功能。

当满足如下要求时,极狐GitLab 会生成此文档:

查看项目的依赖项

  • 在极狐GitLab 17.2 中,当功能标志 skip_sbom_occurrences_update_on_pipeline_id_change 启用时,location 字段不再链接到依赖项上次检测到的提交。该标志默认禁用。
  • 在极狐GitLab 17.3 中,location 字段始终链接到依赖项首次检测到的提交。功能标志 skip_sbom_occurrences_update_on_pipeline_id_change 已删除。

查看项目中的依赖项或群组中所有项目的依赖项:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目或群组。
  2. 选择 安全 > 依赖项列表

列出了每个依赖项的详细信息,并按漏洞严重性(如果有)的递减顺序排序。您可以按组件名称或打包程序对列表进行排序。

字段 描述
Component 依赖项的名称和版本。
Packager 用于安装依赖项的打包程序。
Location 对于系统依赖项,会列出已扫描的镜像。对于应用程序依赖项,显示一个链接,指向您的项目中声明依赖项的特定于打包程序的锁定文件。如果存在并且支持的话,还显示顶级依赖项的依赖项路径
License(仅针对项目) 链接到依赖项的软件许可证。警告标志,包含在依赖项中检测到的漏洞数量。
Projects(仅针对群组) 具有依赖项的项目链接。如果多个项目拥有相同的依赖项,则会显示这些项目的总数。要转到具有此依赖项的项目,请选择 项目 编号,然后搜索并选择其名称。仅在群组层次结构中最多出现 600 次的群组才支持项目搜索功能。

Dependency list

过滤依赖列表

  • 引入于极狐GitLab 16.7,使用名为 group_level_dependencies_filtering 的功能标志。默认禁用。
  • 在极狐GitLab 16.10 中 GA。功能标志 group_level_dependencies_filtering 被移除。

在顶级群组依赖项列表中,您可以通过如下方式来过滤:

  • 项目
  • 许可证

要过滤依赖项列表:

  1. 在左侧导航栏,在顶部,选择 搜索 GitLab ( ) 以找到您的项目或群组。
  2. 选择 安全 > 依赖项列表
  3. 选择过滤器栏。
  4. 选择一个过滤器,然后从下拉列表中选择一个或多个条件。要关闭下拉列表,请选择其外部。要添加更多过滤器,请重复此步骤。
  5. 要应用所选的过滤器,请按 Enter

依赖项列表仅显示与您的过滤器匹配的依赖项。

漏洞

如果依赖项存在已知漏洞,请通过单击依赖项名称旁边的箭头或指示存在多少已知漏洞的标记来查看它们。对于每个漏洞,其严重性和描述显示在其下方。要查看漏洞的更多详细信息,请选择漏洞的描述,然后漏洞详情页面打开。

依赖路径

  • 从 CycloneDX SBOM 中获取的依赖路径信息在极狐GitLab 16.9 中引入,使用名为 project_level_sbom_occurrences 的功能标志。默认禁用。
  • 在极狐GitLab 17.0 中为 JihuLab.com 和私有化部署启用。
  • 在极狐GitLab 17.4 中 GA。功能标志 project_level_sbom_occurrences 已删除。

依赖项列表显示了依赖项和它所连接的顶级依赖项之间的路径(如果有)。多个路径可以将瞬态依赖项连接到顶层依赖项,但用户界面仅显示最短路径之一。

note 仅显示存在漏洞的依赖项的依赖项路径。

Dependency path

以下包管理器支持依赖路径:

许可证

如果配置了依赖项扫描 CI 作业,已发现的许可证显示在此页面上。

下载依赖项列表

您可以下载 JSON 格式的完整依赖项列表及其详细信息。依赖项列表仅显示在默认分支上运行的最后一个成功流水线的结果。

下载依赖项列表:

  1. 在左侧边栏中,选择 搜索或转到 并查找您的项目或群组。
  2. 选择 安全 > 依赖项列表
  3. 选择 导出

故障排除

许可证以 ‘unknown’ 出现

特定依赖项的许可证可能会因为多种原因而展示为 unknown。本节描述如何确定特定依赖项的许可证是否因为已知原因而显示为 unknown

许可证是 ‘unknown’ 上游

检查为上游依赖项指定的许可证:

  • 对 C/C++ 软件包,检查 Conancenter
  • 对 npm 软件包,检查 npmjs.com
  • 对 Python 软件包,检查 PyPI
  • 对 NuGet 软件包,检查 Nuget
  • 对 Go 软件包,检查 pkg.go.dev

如果上游许可证显示为 unknown,则预期极狐GitLab 也会显示该依赖项的 许可证unknown

许可证包含 SPDX 许可证表达

SPDX 许可证表达式当前不受支持。具有 SPDX 许可证表达式的依赖项会将 许可证 展示为 unknow。 SPDX 许可证表达式的一个示例是 (MIT OR CC0-1.0)

软件包版本不在软件包元数据 DB 中

依赖软件包的特定版本必须存在于软件包元数据数据库中。如果它不存在,该依赖项的 许可证 就会显示为 unknown

软件包名称包含特定字符

如果依赖软件包的名称包含中划线(-),则 许可证 可能就会表示为 unknown。当手动添加软件包到 requirements.txt 或使用 pip-compile 时就会发生这种情况。这是因为极狐GitLab 在导入依赖项信息时不会根据 PEP 503 中的标准化名称对 Python 包名称进行标准化。