OWASP Dependency-Check:开源组件分析

FreeGuideOnline 最新 2026-07-04

bash java -version


### 下载与安装

推荐直接下载官方提供的命令行发布包:

1. 访问 [GitHub Releases](https://github.com/jeremylong/DependencyCheck/releases) 下载最新 `dependency-check-<version>-release.zip`。
2. 解压到目标目录,如 `/opt/dependency-check`。
3. 将 `bin` 目录加入系统 PATH:

```bash
export PATH=/opt/dependency-check/bin:$PATH

第一次扫描

进入项目根目录,执行:

dependency-check.sh --project "My Project" --scan ./ 
  • --project 后为项目名称,会显示在报告中。
  • --scan 指定要扫描的目录,工具会自动分析其中的 JAR、DLL、package.json、pom.xml 等文件。

首次运行会自动下载漏洞数据库(约需数分钟),之后便会增量更新。扫描完成后会在当前目录生成 dependency-check-report.html 等报告文件。


集成到构建工具

将 Dependency-Check 嵌入构建流程能实现更自动化的安全门禁。以下以 Maven 和 Gradle 为例。

Maven 集成

pom.xml<build><plugins> 中加入官方插件:

<plugin>
    <groupId>org.owasp</groupId>
    <artifactId>dependency-check-maven</artifactId>
    <version>8.4.2</version>
    <configuration>
        <failBuildOnCVSS>7</failBuildOnCVSS>
        <formats>
            <format>HTML</format>
            <format>JSON</format>
        </formats>
    </configuration>
    <executions>
        <execution>
            <goals><goal>check</goal></goals>
        </execution>
    </executions>
</plugin>
  • failBuildOnCVSS:当存在 CVSS 评分大于等于设定值的漏洞时,构建失败(阻止高风险组件进入制品)。
  • formats:指定输出报告格式,常用 HTML、JSON 和 CSV。

执行检查:

mvn dependency-check:check

报告默认生成在 target/dependency-check-report.html

Gradle 集成

build.gradle 中应用插件:

plugins {
    id 'org.owasp.dependencycheck' version '8.4.2'
}

dependencyCheck {
    failBuildOnCVSS=7
    formats=['HTML','JSON']
}

然后运行:

gradle dependencyCheckAnalyze

解读扫描报告

打开生成的 HTML 报告,主要关注以下几个部分:

摘要信息

展示扫描的文件数、识别的依赖数、发现的漏洞总数、高危/严重漏洞数量等,快速掌握当前项目安全面貌。

漏洞详情列表

每个漏洞条目包含:

  • CVE 编号:指向 NVD 详情页的超链接。
  • CVSS 评分:漏洞的严重程度分值(0-10)。
  • 关联的依赖:具体哪个库的哪个版本存在问题。
  • 漏洞描述:简要说明攻击向量和影响。
  • 修复建议:通常为升级至安全版本。

Dependency-Check 的特有概念

  • 已识别(CPE):工具通过对照 NVD 的 CPE(通用平台枚举)字典,将依赖与已知漏洞进行匹配。
  • 抑制(Suppression):对误报或暂不处理的漏洞,可配置规则将其抑制,避免持续告警。

高级配置与优化

数据来源与更新策略

Dependency-Check 默认从 NVD API 获取漏洞数据,但网络受限时可能失败。可配置镜像或使用本地缓存:

# dependency-check.properties
data.mirror.url=https://your-mirror.example.com/nvd

数据库更新可通过参数控制:

--noupdate   # 完全跳过更新(离线模式)
--cveValidForHours 24  # 设置 NVD 缓存有效期

抑制已知误报

创建 dependency-check-suppression.xml 文件,按规则抑制特定 CVE 或依赖包:

<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
    <suppress>
        <notes><![CDATA[经确认该漏洞不适用于本场景]]></notes>
        <cve>CVE-2022-XXXXX</cve>
    </suppress>
    <suppress>
        <notes><![CDATA[内部库,非外部公开依赖]]></notes>
        <filePath regex="true">.*internal-lib\.jar</filePath>
    </suppress>
</suppressions>

在 CLI 或构建插件中指定该文件:

--suppression dependency-check-suppression.xml

处理私有仓库与 NPM 私有包

若项目使用私有制品库,需提供访问凭据,并让 Dependency-Check 能够解析依赖树。对于 NPM 可配合 npm ls 生成依赖清单;对于 Maven 可配置 settings.xml

内存与性能调优

扫描大型项目时可能遇到内存溢出,启动时建议分配更多堆内存:

dependency-check.sh -Xss8M -Xms512M -Xmx2G --scan ./