nMoncho/sbt-dependency-check

GitHub: nMoncho/sbt-dependency-check

专为 SBT 构建系统设计的 OWASP DependencyCheck 插件,用于自动扫描 Scala 项目依赖库中的已知安全漏洞。

Stars: 28 | Forks: 4

# sbt-dependency-check [![Build Status](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/033e5a9976154904.svg)](https://github.com/nMoncho/sbt-dependency-check/actions/workflows/main.yaml) [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://mit-license.org/) sbt-dependency-check 插件允许项目监控依赖库中已知的、公开披露的漏洞(例如 CVE)。该插件通过使用 出色的 [OWASP DependencyCheck 库](https://github.com/dependency-check/DependencyCheck)来实现这一点,该库已经提供了与其他构建和持续集成系统的多种集成。 为了保持本 `README.md` 的简明扼要,关于如何使用此插件的详细文档可以在我们的 [wiki](https://github.com/nMoncho/sbt-dependency-check/wiki) 中找到。 ## 安装说明 将插件添加到您的项目配置中: ``` addSbtPlugin("net.nmoncho" % "sbt-dependency-check" % "1.9.0") ``` 支持的最低 SBT 版本为 `1.9.0`。 ## 使用方法 ### 入门指南 不要被此插件中定义的所有配置设置所吓倒。它们都有合理的默认值。 最好的入门方式是安装插件,并设置您的 [NVD API Key](#nvd-api): ``` import net.nmoncho.sbt.dependencycheck.settings._ dependencyCheckNvdApi := NvdApiSettings(apiKey = "YOUR_NVD_API_KEY") ``` 然后只需运行: ``` sbt -Dlog4j2.level=info dependencyCheck ``` 首次运行这些任务时会花费一些时间,甚至可能需要几分钟。对于 SBT 1.x,分析会将报告写入 `target/{scala-version}/dependency-check-report.html`;对于 SBT 2.x,报告将写入 `target/out/jvm/{scala-version}/{project}/dependency-check-report.html`。插件会通过日志提示报告的写入位置。 在此之后,您可以随意查看可用的任务和设置。 ### 任务 以下任务可用: | 任务 | 描述 | |:----------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `dependencyCheck` | 对项目运行 dependency-check 并为每个子项目生成报告。 | | `dependencyCheckAggregate` | 对项目聚合运行 dependency-check,并将结果合并到单个报告中。 | | `dependencyCheckAllProjects` | 对所有项目运行 dependency-check,并将结果合并到单个报告中。 | | `dependencyCheckUpdate` | 更新来自 NIST 的 NVD 数据的本地缓存。 | | `dependencyCheckPurge` | 删除 NVD 的本地副本。用于强制刷新数据。 | | `dependencyCheckListSettings` | 列出在分析期间使用的设置。 | | `dependencyCheckListUnusedSuppressions` | 列出未使用的抑制规则,仅考虑在项目定义(即 build.sbt)中定义的抑制文件或规则,不包括托管抑制或打包的抑制。 | | `dependencyCheckListSuppressions` | 列出添加到 Owasp 引擎中的抑制规则,这些规则在项目定义(即 build.sbt)中定义,或是导入的打包抑制。 | 默认情况下,报告将写入 `crossTarget.value`。可以通过设置 `dependencyCheckOutputDirectory` 来覆盖此行为。 详情请参见 [配置](#configuration)。 #### `dependencyCheck` 参数 默认情况下,`dependencyCheck` 将在选定的项目下运行,如果未选择任何项目,则默认在 `root` 下运行。它也会在该项目聚合的子项目上运行(就像 SBT 中的任何其他任务一样),为每个项目生成一份报告。 任务 `dependencyCheck` 支持可用于更改其行为的参数: - `list-settings`:在运行分析之前,将打印用于分析的设置。这与任务 `dependencyCheckListSettings` 的工作方式相同。 - `list-unused-suppressions`:分析完成后将打印任何未使用的抑制规则。这与任务 `dependencyCheckListUnusedSuppressions` 的工作方式相同。 - `single-report`:将为此项目及其所有聚合(如果有的话)生成单个报告。这与任务 `dependencyCheckAggregate` 的工作方式相同。 - `all-projects`:将为所有项目生成单个报告。这与任务 `dependencyCheckAllProjects` 的工作方式相同。 **重要提示**:此参数需要与 `single-report` 一起使用。 此任务还支持修改最后显示的报告摘要的方式: - `original-summary`:这是插件先前版本提供的原始摘要。遵循 `org.owasp.dependencycheck.agent.DependencyCheckScanAgent.showSummary` 的结构。 - `all-vulnerabilities-summary`:显示比 `original-summary` 更紧凑的报告,但包含每个漏洞的评分。 - `offending-vulnerabilities-summary`:与 `all-vulnerabilities-summary` 相同,但仅显示导致构建失败的违规漏洞(即那些导致构建失败的漏洞)。 ### 配置 该插件使用默认的 [DependencyCheck](https://github.com/dependency-check/DependencyCheck) 配置,可以通过 SBT Setting Key 或 System Property 来覆盖。库按以下顺序解析属性: (1) `dependencycheck.properties` 值,(2) SBT Setting Keys,(3) System Property。最后一个非空值生效。 可以使用 Setting Key `dependencyCheckSettingsFile` 覆盖默认的 `properties` 文件。大多数(即使不是全部)设置都是从 DependencyCheck 定义的默认值中获取的。您可以运行任务 `dependencyCheckListSettings` 来了解每个设置的最终值,以及此 properties 文件内容的示例。 SBT Setting Keys 通常用 `Option` 包装。这是为了允许保留默认值,代价是牺牲一些配置的便利性。 | 设置 | 描述 | 默认值 | |:---------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------| | `dependencyCheckFailBuildOnCVSS` | 指定如果识别到高于指定级别的 CVSS 评分,是否应使构建失败 | 11.0 (永不使构建失败) | | `dependencyCheckJUnitFailBuildOnCVSS` | 如果使用 jUnit,指定在生成 jUnit 样式报告时被视为 `test` 失败的 CVSS 评分 | 0.0 | | `dependencyCheckSkip` | 在 dependency-check 分析中跳过此项目 | `false` | | `dependencyCheckScopes` | 在分析期间考虑哪些库的依赖范围 | Compile = true, Test = false, Runtime = true, Provided = true, Optional = true | | `dependencyCheckScanSet` | 可选的文件序列,指定要作为扫描的一部分进行分析的额外文件和/或目录 | 标准 Scala 约定 | | `dependencyCheckFormats` | 要生成的报告格式 | `HTML` | | `dependencyCheckAnalysisTimeout` | 设置分析超时时间。 | 180 分钟 (由 DependencyCheck 决定) | | `dependencyCheckOutputDirectory` | 写入报告的位置。 | `cross.target` | | `dependencyCheckAutoUpdate` | 设置是否启用 NVD CVE/CPE、retireJS 和托管抑制数据的自动更新。 | `true` | | `dependencyCheckDataDirectory` | 用于数据目录(用于嵌入式数据库和其他来自互联网的缓存资源)的基本路径 | `[JAR]/data/11.0` | | `dependencyCheckSettingsFile` | 在何处查找 'dependencycheck.properties' 文件 | 资源 `dependencycheck.properties` | | `dependencyCheckAnalyzers` | 用于在分析期间运行的不同分析器的设置 | 参见 [分析器设置](#analyzer-settings) | | `dependencyCheckSuppressions` | 将一系列 XML 抑制文件的文件路径或 URL,与分析应使用的任何托管抑制结合在一起。抑制用于忽略误报。 | 空 | | `dependencyCheckDatabase` | 用于在分析期间保存 CVE 的数据库设置。 | 参见 [数据库设置](#database-settings) | | `dependencyCheckNvdApi` | 用于联系 NVD API 的设置,例如 API Key、请求延迟、最大重试次数等。 | 参见 [NVD API](#nvd-api) | | `dependencyCheckProxy` | 使用代理的设置。支持 System Property,如 `https.proxyHost`、`https.proxyPort` 等。 | 参见 [在代理下运行](#running-behind-a-proxy) | | `dependencyCheckConnectionTimeout` | 设置下载外部数据时使用的 URL 连接超时时间(以毫秒为单位)。 | `10 秒` | | `dependencyCheckConnectionReadTimeout` | 设置下载外部数据时使用的 URL 连接读取超时时间(以毫秒为单位)。 | `60 秒` | #### 敏感配置 `DependencyCheck` 可能会使用诸如用户名、密码和 Bearer Tokens 等敏感信息。尽管这些可以作为 SBT Setting Keys 添加,但强烈建议不要这样做,以避免将敏感信息提交到您的 VCS 中。以下是一些替代方案: - 在 `~/.sbt//plugins.sbt` 下全局安装此插件,然后在该文件中定义这些值。 - 使用外部的 `dependencycheck.properties` 并设置 `dependencyCheckSettingsFile`。 - 在运行 SBT 任务时使用 System Property:`sbt -Danalyzer.central.password=12348765 dependencyCheck` #### NVD API Dependency-check 已从使用 NVD 数据源转向使用 NVD API。**强烈**建议获取 NVD API Key;请参见 [请求 API Key](https://nvd.nist.gov/developers/request-an-api-key)。如果没有 NVD API Key,更新速度将**极其缓慢**。 在 CI 环境中,必须使用缓存策略,例如缓存 CVE 数据库。 请阅读我们的 [wiki](https://github.com/nMoncho/sbt-dependency-check/wiki/NVD-API) 了解更多信息。 #### 抑制设置 由于 [dependency-check 识别库的方式](https://dependency-check.github.io/DependencyCheck/general/internals.html),可能会出现误报(即识别到了不正确的 CPE)。`sbt-dependency-check` 提供了几种定义这些抑制的方法。 请阅读我们的 [wiki](https://github.com/nMoncho/sbt-dependency-check/wiki/SUPPRESSIONS) 了解更多信息。 #### 分析器设置 顾名思义,分析器是分析依赖或构件的一种方式。[DependencyCheck](https://github.com/dependency-check/DependencyCheck) 提供了开箱即用的广泛分析器列表。 请阅读我们的 [wiki](https://github.com/nMoncho/sbt-dependency-check/wiki/ANALYZERS) 了解更多信息。 ### 在代理下运行 SBT 和 `sbt-dependency-check` 都遵循 JVM 的标准 HTTP 和 HTTPS 代理设置。 ``` sbt -Dhttp.proxyHost=proxy.example.com \ -Dhttp.proxyPort=3218 \ -Dhttp.proxyUser=username \ -Dhttp.proxyPassword=password \ -Dproxy.nonproxyhosts="localhost|http://www.google.com" \ dependencyCheck ``` ### 更改日志级别 在运行任务时添加 `-Dlog4j2.level=`,例如: ``` sbt -Dlog4j2.level=debug dependencyCheck ``` 将 `dependencyCheck` 替换为您项目使用的正确 [任务名称](#tasks)。
标签:Claude, CVE检测, NVD API, OWASP DependencyCheck, SBT插件, Scala构建工具, 依赖安全检查, 开源依赖管理, 持续集成(CI), 软件成分分析(SCA)