依赖项扫描
使用依赖项列表查看项目或群组的依赖项和有关这些依赖项的关键详细信息,包括它们的已知漏洞。它是项目中依赖项的集合,包括现有的和新的发现。该信息有时被称为软件物料清单、SBOM 或 BOM。
先决条件
要列出项目的依赖项,SBOM 文档必须:
- 需符合 CycloneDX 规范的 1.4、1.5 或 1.6 版本。
- 作为 CI/CD 产物报告从默认分支上的成功流水线上传。
当满足如下要求时,极狐GitLab 会生成此文档:
- 必须为您的项目配置 依赖项扫描 或 容器扫描 CI 作业。
- 项目必须使用 Gemnasium 支持的至少一种语言和打包程序。
- 默认分支上成功运行的流水线。您不应该修改允许 应用程序安全作业失败的默认行为。
查看项目的依赖项
- 在极狐GitLab 17.2 中,当功能标志
skip_sbom_occurrences_update_on_pipeline_id_change
启用时,location
字段不再链接到依赖项上次检测到的提交。该标志默认禁用。- 在极狐GitLab 17.3 中,
location
字段始终链接到依赖项首次检测到的提交。功能标志skip_sbom_occurrences_update_on_pipeline_id_change
已删除。
查看项目中的依赖项或群组中所有项目的依赖项:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目或群组。
- 选择 安全 > 依赖项列表。
列出了每个依赖项的详细信息,并按漏洞严重性(如果有)的递减顺序排序。您可以按组件名称或打包程序对列表进行排序。
字段 | 描述 |
---|---|
Component | 依赖项的名称和版本。 |
Packager | 用于安装依赖项的打包程序。 |
Location | 对于系统依赖项,会列出已扫描的镜像。对于应用程序依赖项,显示一个链接,指向您的项目中声明依赖项的特定于打包程序的锁定文件。如果存在并且支持的话,还显示顶级依赖项的依赖项路径。 |
License(仅针对项目) | 链接到依赖项的软件许可证。警告标志,包含在依赖项中检测到的漏洞数量。 |
Projects(仅针对群组) | 具有依赖项的项目链接。如果多个项目拥有相同的依赖项,则会显示这些项目的总数。要转到具有此依赖项的项目,请选择 项目 编号,然后搜索并选择其名称。仅在群组层次结构中最多出现 600 次的群组才支持项目搜索功能。 |
过滤依赖列表
- 引入于极狐GitLab 16.7,使用名为
group_level_dependencies_filtering
的功能标志。默认禁用。- 在极狐GitLab 16.10 中 GA。功能标志
group_level_dependencies_filtering
被移除。
在顶级群组依赖项列表中,您可以通过如下方式来过滤:
- 项目
- 许可证
要过滤依赖项列表:
- 在左侧导航栏,在顶部,选择 搜索 GitLab () 以找到您的项目或群组。
- 选择 安全 > 依赖项列表。
- 选择过滤器栏。
- 选择一个过滤器,然后从下拉列表中选择一个或多个条件。要关闭下拉列表,请选择其外部。要添加更多过滤器,请重复此步骤。
- 要应用所选的过滤器,请按 Enter。
依赖项列表仅显示与您的过滤器匹配的依赖项。
漏洞
如果依赖项存在已知漏洞,请通过单击依赖项名称旁边的箭头或指示存在多少已知漏洞的标记来查看它们。对于每个漏洞,其严重性和描述显示在其下方。要查看漏洞的更多详细信息,请选择漏洞的描述,然后漏洞详情页面打开。
依赖路径
- 从 CycloneDX SBOM 中获取的依赖路径信息在极狐GitLab 16.9 中引入,使用名为
project_level_sbom_occurrences
的功能标志。默认禁用。- 在极狐GitLab 17.0 中为 JihuLab.com 和私有化部署启用。
- 在极狐GitLab 17.4 中 GA。功能标志
project_level_sbom_occurrences
已删除。
依赖项列表显示了依赖项和它所连接的顶级依赖项之间的路径(如果有)。多个路径可以将瞬态依赖项连接到顶层依赖项,但用户界面仅显示最短路径之一。
以下包管理器支持依赖路径:
许可证
如果配置了依赖项扫描 CI 作业,已发现的许可证显示在此页面上。
下载依赖项列表
您可以下载 JSON 格式的完整依赖项列表及其详细信息。依赖项列表仅显示在默认分支上运行的最后一个成功流水线的结果。
下载依赖项列表:
- 在左侧边栏中,选择 搜索或转到 并查找您的项目或群组。
- 选择 安全 > 依赖项列表。
- 选择 导出。
故障排除
许可证以 ‘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 包名称进行标准化。