# @appthreat/cdxgen 中文文档

规范地址：https://npmcn.com/package/%40appthreat/cdxgen/

版本：7\.0\.5
npm 元数据更新时间：2023-02-13T16:05:35.033Z
中文译文更新时间：2026-11-06T12:44:08.134Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40appthreat/cdxgen
原文对照：https://npmcn.com/package/%40appthreat/cdxgen/?lang=original
项目主页：http://github.com/AppThreat/cdxgen
源码仓库：https://github.com/AppThreat/cdxgen

弃用说明：Package no longer supported\. Contact Support at https://www\.npmjs\.com/support for more info\.

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：431 kB，19 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=12\.0\.0
- 运行依赖：26 个
- 首次发布：2019-12-31T17:36:07.092Z
- 最新版本发布：2023-02-02T15:38:02.413Z
- 近 30 天下载量：10424（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：221（近 12 个月 0 个）

## 中文简介

从源代码或容器图像创建 CirponDX 软件

## 安装

```sh
npm install @appthreat/cdxgen
```

也可以使用：`pnpm add @appthreat/cdxgen`、`yarn add @appthreat/cdxgen`、`bun add @appthreat/cdxgen`

## README

# 旋风DX 生成器

![cdxgen logo](https://npmcn.com/package/%40appthreat/cdxgen/cdxgen.png)

这个工具创建了一个有效且兼容的 CyproneDX 软件Bill-Of-Matrials (SBOM) , 包含 c/c++, 节点.js, php, python, 红宝石, 生锈, java,. Net, dart, haskell, elixir, 和 Go 项目的所有项目依赖性集合, 其格式为 XML和JSON. CirponDX 1.4是一种轻量级SBOM规格,易于被创建,人和机可读取,易解析.

当使用插件时,cdxgen可以为Linux docker图像甚至运行Linux或Windows操作系统的VMs生成一个SBoM.

## 支持的语言和软件包格式

| 语文/格式 | 软件包格式 | 过渡性依赖性 |
| --- | --- | --- |
| 节点.js | npm-shrink wrap.json, packet-lock.json, pnpm-lock.yaml, 纱线.lock, 匆忙.js, 弓箭手.json, .min.js | 对,但.min.js除外 |
| 贾瓦 | maven (pom.xml \[1\]), gradle (built.gradle,.kts), scala (sbt), bazel (英语) | 是的,除非pom.xml因无母体或出错而手动解析 |
| 密码 | 作曲家.lock | 对 |
| 蟒蛇 | setup.py, requireds.txt \[2\], Pipfile.lock, 诗歌.lock, bdist wheel,.whl,.egg-info | 只有Pipfile.lock和诗歌.lock |
| 离开 | 二进制,去.mod,去.sum,Gopkg.lock | 是, 二进制除外 |
| 红宝石 | Gemfile.lock, 宝石谱 | 只用于 Gemfile.lock |
| 生锈 | 二进制, cargo.toml, cargo.lock | 仅供 Cargo.lock使用 |
| .Net (中文(简体) ) | .csproj, packages.config, project.assets.json \[3\], packages.lock.json,.nupkg | 仅用于项目.assets.json, packages.lock.json |
| 镖 | (原始内容存档于2017-03-27) (英语). pubspect.lock, pubspect.yaml | 仅用于阴极.lock |
| 哈斯凯尔 | {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢 | 对 |
| 精灵 | 混合. 锁定 | 对 |
| c/c++ 数 | conan.lock, conanfile.txt (韩语) | 是的,只给Conan.lock |
| 血浆 | Clojure CLI (deps.edn), 莱宁根 (project.clj) (英语) | 是的,除非由于缺少cljure cli或leiningen命令而手动解析文件 |
| docker / comic 图像 | 所有支持的语言。 Linux OS 套件, 有插件 \[4\] | 基于锁定文件的最佳努力 |
| GitHub 动作 | .github/工作流量/\*.yml | 不详 |
| 链接 | 所有支持的语言。 带有插件的 Linux OS 包 \[5\] | 基于锁定文件的最佳努力 |
| 窗口 | 所有支持的语言。 最佳操作软件包 \[5\] | 基于锁定文件的最佳努力 |
| 詹金斯插件 | .hpi 文件 |  |
| 螺旋图 | . 亚姆尔 | 不详 |
| 斯卡福尔 | . 亚姆尔 | 不详 |
| 悬念化 | . 亚姆尔 | 不详 |
| Tekton 任务 | . 亚姆尔 | 不详 |
| 库伯涅斯 | . 亚姆尔 | 不详 |
| 马文缓存 | (单位:千美元) | 不详 |
| SBT 缓存 | $HOME/.ivy2/cache/\*\*/\*.jar | 不详 |
| 缓存 | $HOME/caches/modules-2/files-2.1/\*\*/\*.jar | 不详 |
| 赫尔姆指数 | USHOME/.cache/helm/仓库/\*\*/\*.yaml | 不详 |
| 多克编曲 | docker-compose \*.yml. 中国植物物种信息数据库. 图像也将被扫描. | 不详 |
| 谷歌云构建配置 | 积云.yaml | 不详 |
| 打开API | (原始内容存档于2013-10-12). openapi \*.json, openapi \*.yaml | 不详 |
| [普里瓦多](https://www.privado.ai/?utm_source=AppThreat) | privado.json (英语) | 将列入数据和服务信息。 采用通用模式. |

注:

-   解析 pom.xml 需要 Apache maven 3.x
-   gradle或gradlew需要分析gradle项目
-   剖析 scala sbt 项目需要 sbt 。 目前仅支持scala 2.10 + sbt 0.13.6+和 2.12 + sbt 1.0+.
    -   或者,使用 sbt- dependency- lock 创建锁定文件 [插件](https://github.com/stringbean/sbt-dependency-lock)

脚注:

-   \[1\] - 对于多模块应用程序,BOM文件可以包括可能不包含在被打包的战争或耳朵文件中的组件.
-   \[2\] - 使用pip冻结来提高基于要求.txt的解析的准确性. `python -m pip freeze > requirements.txt`
-   \[3\] - 执行点网或核子还原以生成工程. assets.json. 如果没有此文件, cdxgen 将不包括间接依赖性 .
-   \[4\] - 见插件部分
-   \[5\] --由Osquery提供动力. 见插件部分

### 自动使用检测

对于 node.js 项目,锁文件最初被解析,所以SBOM将包含所有依赖性,包括dev依赖性. 然后使用由bayl-parser提供动力的AST解析器来检测被导入并被非测试代码使用的包. 此类进口包将自动拥有其 `scope` 设置为 `required` 在结果的 SBoM 中。 通过传递论据 `--no-babel`,可以禁用此分析。 范围财产将依据 `dev` 属性在锁定文件中.

这个属性后来可用于各种目的. 譬如说, [扫描](https://github.com/appthreat/dep-scan) 使用此属性来确定脆弱性的优先次序。 遗憾的是,这种依赖轨道的工具不包括这一特点,因此可能过度报告CVE.

通过传递论据 `--required-only`,可以限制SBoM只包含有范围"需要"的包,通称生产或非生产依赖. 与 `--no-babel` 将此列表限制在基于 `dev` 属性在锁文件中是虚假的.

为了去, `go mod why` 命令用于识别所需的软件包。 对于php,作曲锁文件用于区分所需(packages)和可选(packages-dev).

## 使用量

## 安装

```bash
sudo npm install -g @appthreat/cdxgen
```

您也可以使用 Cdxgen 容器图像

```bash
docker run --rm -it -v /tmp:/tmp -v $(pwd):/app:rw -t ghcr.io/appthreat/cdxgen -r /app
```

## 获取帮助

```bash
$ cdxgen -h
Options:
  -o, --output           Output file for bom.xml or bom.json. Default console
  -t, --type             Project type
  -r, --recurse          Recurse mode suitable for mono-repos          [boolean]
  -p, --print            Print the SBoM as a table                     [boolean]
  -c, --resolve-class    Resolve class names for packages. jars only for now.
                                                                       [boolean]
      --deep             Perform deep searches for components. Useful while
                         scanning live OS and oci images.              [boolean]
      --server-url       Dependency track or AppThreat server url. Eg:
                         https://deptrack.appthreat.io
      --api-key          Dependency track or AppThreat server api key
      --project-group    Dependency track or AppThreat project group
      --project-name     Dependency track or AppThreat project name. Default use
                         the directory name
      --project-version  Dependency track or AppThreat project version
      --project-id       Dependency track or AppThreat project id. Either
                         provide the id or the project name and version together
      --required-only    Include only the packages with required scope on the
                         SBoM.                                         [boolean]
      --fail-on-error    Fail if any dependency extractor fails.       [boolean]
      --no-babel         Do not use babel to perform usage analysis for
                         JavaScript/TypeScript projects.               [boolean]
      --generate-key-and-sign  Generate an RSA public/private key pair and then
                               sign the generated SBoM using JSON Web
                               Signatures.                             [boolean]
      --server                 Run cdxgen as a server                  [boolean]
      --server-host            Listen address             [default: "127.0.0.1"]
      --server-port            Listen port                     [default: "9090"]
      --version          Show version number                           [boolean]
  -h                     Show help                                     [boolean]
```

## 示例

最小的例子.

```bash
cdxgen -o bom.json
```

注:

cdxgen总是按照CirponDX 1.4的规格,以xml和json两种形式出产硼. json是推荐格式.

为了一个java项目。 这样可以自动检测出马文、格来尔或斯布特 并相应构建出波姆

```bash
cdxgen -t java -o bom.json
```

将 SBoM 作为表单打印 `-p` 参数.

```bash
cdxgen -t java -o bom.json -p
```

递归生成所有语言的单 BOM 通关 `-r` 参数.

```bash
cdxgen -r -o bom.json
```

## 通用 SBoM

通过传递类型 `-t universal`,cdxgen可能会被迫通过扫描所有包件,容器和库伯内特斯的出货单来机会性地收集尽可能多的组件和服务. 由此产生的SBoM可能有上千多个组件,因此需要在使用传统的SCA工具之前进行额外的分解.

## SBoM 服务器

输入 cdxgen 与 `--server` 参数以服务器模式运行。 默认情况下, 它会听取端口 `9090` 可随参数定制 `--server-host` 财务报告和审定财务报表 `--server-port`。 。 。 .

```bash
cdxgen --server
```

或使用容器图像.

```bash
docker run --rm -it -v /tmp:/tmp -p 9090:9090 -v $(pwd):/app:rw -t ghcr.io/appthreat/cdxgen -r /app --server
```

使用卷曲或您最喜欢的工具将参数传递到 `/sbom` 路线.

### 扫描本地路径

```bash
curl "http://127.0.0.1:9090/sbom?path=/Volumes/Work/sandbox/vulnerable-aws-koa-app&multiProject=true&type=js"
```

### 扫描一个 git repo

```bash
curl "http://127.0.0.1:9090/sbom?url=https://github.com/HooliCorp/vulnerable-aws-koa-app.git&multiProject=true&type=js"
```

你可以开始辩论.

```bash
curl -H "Content-Type: application/json" http://localhost:9090/sbom -XPOST -d $'{"url": "https://github.com/HooliCorp/vulnerable-aws-koa-app.git", "type": "nodejs", "multiProject": "true"}'
```

### 多克编曲

```
git clone https://github.com/AppThreat/cdxgen.git
docker compose up
```

## Privado.ai 支持软件

在通用模式下, cdxgen 可以查找任意 [普里瓦多](https://www.privado.ai/?utm_source=AppThreat) 扫描报告并用数据(流量和分类)、终点和泄漏信息来丰富SBoM。 这种SBoM将有助于遵守隐私并使用案件.

Invoke privado 扫描以生成此报告,然后以显示的通用模式引用 cdxgen .

```bash
privado scan --enable-javascript <directory>
cdxgen -t universal <directory> -o bom.json
```

## 战争文件支持

cdxgen可以从给定的战争文件中生成一个BOM文件.

```bash
# cdxgen -t java app.war
cdxgen app.war
```

## 解析类名

有时需要解决罐子文件中包含的类名. 通过一个可选的论据 `--resolve-class`,可以获取 cdxgen 创建单独的映射文件,将罐名(包括版本)作为键名和类名列表作为值.

```bash
cdxgen -t java --resolve-class -o bom.json
```

这将创建一个 bom.json.map 文件与罐 - 类名称映射。 参见 [这些](https://npmcn.com/package/%40appthreat/cdxgen/test/data/bom-maven.json.map) [实例](https://npmcn.com/package/%40appthreat/cdxgen/test/data/bom-gradle.json.map) 学习结构.

## 吊销许可证

cdxgen可以自动查询maven或npm等公共注册,或微分解包许可证. 这是一个耗时的操作, 默认已禁用 。 要启用, 设置环境变量 `FETCH_LICENSE` 改为 `true` 如所示.

```bash
export FETCH_LICENSE=true
```

## 依赖树

cdxgen 可以保留树的依赖性 `dependencies` 属性用于少数支持的软件包显示。 目前仅限于:

-   软件包锁.json
-   纱线. lock
-   pnpm-lock.yaml (英语)
-   马文 (pom.xml)
-   摇摆

## 环境变量

| 变量 | 说明 |
| --- | --- |
| SCAN DEBUG MODE (中文(简体) ) | 设定调试以启用调试消息 |
| (原始内容存档于2018-10-21). GITHUB TOKEN | 指定 GitHub 令牌, 在查询许可证和回放信息时防止交通塑造 |
| MVN CMD 游戏机 | 设定覆盖 maven 命令 |
| MVN 目标 | 设定传递更多参数, 如配置文件或设置以创建 |
| 母亲的呼声 | 指定母体家园 |
| (原始内容存档于2018-09-26) (英语). GRADLE CACHE DIR | 指定格勒缓存目录。 类名解析有用 |
| GRADLE MULTI PROJECT 模型 | 为 Gradle 多项目应用程序设定此变量 。 不要使用重复模式 . |
| 格莱德 目标 | 设定将 profile 或设置等附加参数传递给 gradle 。 例如: -- configation runtimeClassPath |
| 格莱德·霍米 | 指定 gradle 家 |
| (简体中文) | 设定覆盖 gradle 命令 |
| (简体中文) | 默认cdxgen使用任务"依赖"来收集软件包. 设定覆盖任务名称 . |
| SBT CACHE DIR (英语) | 指定 sbt 缓存目录 。 类名解析有用 |
| (法语) | 设定为真从注册处获取许可信息 。 npm 和 golang 仅此而已 |
| 用 语 | 设定为 true 为 golang 项目生成 BOMs , 使用 go. sum 作为依赖源的 truth, 而不是 go. mod |
| CDXGEN TIMEOUT MS (英语) | 已知处决涉及maven、 gradle 或 sbt 的默认超时 |
| 巴泽尔-目标 | 巴泽尔目标要建了 默认 : 全部( 如: // java- maven) |
| CLJ CMD (中文(简体) ) | 设置以覆盖 clujure cli 命令 |
| LEIN CMD (英语) | 设定覆盖来宁根命令 |
| SBOM SIGN ALGORITHM (英语) | 签名算法. 一些有效值为RS256,RS384,RS512,PS256,PS384,PS512,ES256等 |
| SBOM SIGN PRIVATE KEY (英语) | 用于签名的私钥 |
| SBOM SIGN PUBLIC KEY (英语) | 可选的 包含在 SBoM 签名中的公钥 |

## 与 GitHub 动作合并

使用 GitHub [动作](https://github.com/AppThreat/cdxgen-action) 自动生成并上传到服务器。 参见 `nodejs.yml` 在此重播一个实例.

## 与 Google 云建集成

使用这个 [自定义构建器](https://github.com/CloudBuildr/google-custom-builders/tree/master/cdxgen) 并参考读取的指令.

## 插件

cdxgen可以通过外部的二进制插件来扩展支持更多的SBoM使用大小写. 这些现已作为可选的附属物安装.

```
sudo npm install -g @appthreat/cdxgen-plugins-bin
```

### Docker / OCI 容器支持

`docker` 类型根据存在值自动检测,例如 `sha256` 或者说 `docker.io` 前缀等.

```bash
cdxgen odoo@sha256:4e1e147f0e6714e8f8c5806d2b484075b4076ca50490577cdf9162566086d15e -o /tmp/bom.json
```

也可以通过 `-t docker` 为简单的标签。 只有 `latest` 如果未指定标记, 则将拉出标记 .

```bash
cdxgen shiftleft/scan-slim -o /tmp/bom.json -t docker
```

也可以通过容器图像的.tar文件.

```bash
docker save -o /tmp/slim.tar shiftleft/scan-slim
podman save -q --format oci-archive -o /tmp/slim.tar shiftleft/scan-slim
cdxgen /tmp/slim.tar -o /tmp/bom.json -t docker
```

注:

-   只有应用程序相关包由cdxgen收集. 对OS已安装软件包的支持即将到来.

### 无根模式下的Podman

在其中任一位置设置起居员 [无根](https://github.com/containers/podman/blob/master/docs/tutorials/rootless_tutorial.md) 或者说 [远程](https://github.com/containers/podman/blob/master/docs/tutorials/mac_win_client.md) 模式

在 Linux 上, 请不要忘记启动 API 访问所需的 pockman 套接字 .

```bash
systemctl --user enable --now podman.socket
systemctl --user start podman.socket
podman system service -t 0 &
```

### 为活系统生成 SBoM

您可以通过传递参数来使用 cdxgen 生成 SBoM 用于活系统或 VM 用于遵守和脆弱性管理目的 `-t os`。 。 。 .

```
cdxgen -t os
```

此特性由 Osquery 提供动力,即 [已安装](https://github.com/appthreat/cdxgen-plugins-bin/blob/main/build.sh#L8) 和二进制插件一起。 cdxgen 将尝试于机会性地尝试使用该程序检测尽可能多的组件、app和扩展 [默认查询](https://npmcn.com/package/%40appthreat/cdxgen/queries.json)。这一过程需要几分钟,并产生一个包含上千个组件的 SBoM 文件.

## SBoM 签名

cdxgen可以签名生成的SBoM json文件来提高真实性和非校验能力. 要启用此选项, 请设置以下环境变量 .

-   SBOM SIGN ALGORITHM:算术. 示例:RS512
-   SBOM SIGN PRIVATE KEY: RSA 私人密钥的位置
-   SBOM SIGN PUBLIC KEY:可选. RSA 公钥的位置

要生成测试的公/私密密钥对, 您可以通过传递参数运行 cdxgen `--generate-key-and-sign`。生成的json文件将有一个属性叫做 `signature` 可用于验证. [jwt.io (英语)](https://npmcn.com/package/%40appthreat/cdxgen/jwt.io) 是一个已知的可用于此种签字验证的地点.

![SBoM signing](https://npmcn.com/package/%40appthreat/cdxgen/sbom-sign.jpg)

## 自动服务检测

cdxgen可以自动检测YAML列表中的服务名称,如多克-编译或库伯涅特或斯卡福德列表等. 这些居民将居住在 `services` 属性在生成的 SBoM 中。 请通过提交任何不准确的检测问题来帮助改进这一特征.

## 转换为 SPDX 格式

使用 [旋风DX CLI](https://github.com/CycloneDX/cyclonedx-cli) 用于高级使用的工具,例如转换、diff和合并.

## 许可证

根据Apache 2.0许可证的规定,允许修改和再分配。 见 [自由主义](https://npmcn.com/package/%40appthreat/cdxgen/LICENSE) 完整许可证存档.

## 解析支持

开发者可以通过 [不对](https://discord.gg/DCNxzaeUpd) 频道.

## 常见问题

### @appthreat/cdxgen 是什么？

从源代码或容器图像创建 CirponDX 软件注意：该包已被作者标记为弃用——Package no longer supported\. Contact Support at https://www\.npmjs\.com/support for more info\.

### 如何安装 @appthreat/cdxgen？

在项目目录运行 npm install @appthreat/cdxgen，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 cdxgen，可以用 npx cdxgen 直接运行。

### @appthreat/cdxgen 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/appthreat\_\_cdxgen 是否存在。

### @appthreat/cdxgen 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @appthreat/cdxgen 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=12\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @appthreat/cdxgen 可以商用吗？

@appthreat/cdxgen 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @appthreat/cdxgen 的下载量有多少？

根据 npm 官方下载统计，@appthreat/cdxgen 在 2026/10/07 – 2026/11/05 这 30 天内被下载 10,424 次，日均约 347 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @appthreat/cdxgen 还在维护吗？

最新版本 7\.0\.5 发布于 2023/02/02（3 年前）；至今共发布 221 个版本，其中过去 12 个月发布了 0 个；首次发布于 2020/01/01。作者已将其标记为弃用，新项目建议寻找替代方案。

