scanoss/sbom-workbench
GitHub: scanoss/sbom-workbench
基于 Electron 的桌面应用,通过图形界面扫描源码识别开源组件,审计许可证合规性并生成 SBOM。
Stars: 60 | Forks: 13
# [SBOM Workbench](https://scanoss.com/product)
## 前置条件
- Node.js >=v22.12.0
- NPM (Node Packages Manager)
我们强烈建议使用 [nvm](https://github.com/nvm-sh/nvm) 来管理您的 Node 版本
## 安装
```
npm install --legacy-peer-deps
```
请注意,您应该在安装命令中包含 `--legacy-peer-deps` 参数。这是因为 `@mui/styles` 与 React 18 不兼容。您可以在 [https://mui.com/system/styles/basics/](https://mui.com/system/styles/basics/) 找到有关此内容的更多信息。
### 故障排除
SBOM Workbench 使用 [node-gyp](https://www.npmjs.com/package/node-gyp) 来编译 SQLite3 原生模块。
该模块使用 "node-pre-gyp" 为您的平台下载预构建的二进制文件,否则您需要从源代码进行构建。
如果您的平台不存在预构建的二进制文件,node-gyp 将进行构建。
根据您的操作系统,您需要准备正确的环境来运行 node-gyp:请参阅 [https://github.com/nodejs/node-gyp#installation](https://github.com/nodejs/node-gyp#installation)
## 开始开发
在 `dev` 环境中启动应用程序:
```
npm start
```
对于实时重载,您可以使用 `npm run start --watch` 来运行使用 [Electronmon](https://github.com/catdad/electronmon#readme) 的应用程序。警告:此工具具有较高的内存消耗。
## 生产环境打包
为本地平台打包应用程序:
```
npm run package
```
## 多语言 (i18n)
SBOM Workbench 支持多语言。要贡献一种新语言,请参阅我们的[国际化文档](assets/i18n/README.md)。
## 工作台配置
SBOM Workbench 支持高级设置。所有配置都需要包含在全局配置文件 `~/.scanoss/sbom-workbench-settings.json` 中
### 扫描器参数
`"SCANNER_CONCURRENCY_LIMIT": ""`
扫描时使用的线程数(可选 - 默认为 5)
`"SCANNER_POST_SIZE": ""`
扫描时限制 post 请求的千字节数(可选 - 默认为 16)
`"SCANNER_TIMEOUT": ""`
API 通信的超时时间(以秒为单位)(可选 - 默认为 300)
### 代理设置
您可能需要根据网络的配置方式指定代理设置
`"PROXY": ":"`
如果您的网络使用具有 SSL 拦截功能的代理,您可以在配置中包含您的证书
`"CA_CERT": ""`
您可以禁用任何 SSL 错误,为此您可以将此选项更改为 true
`"IGNORE_CERT_ERRORS": true`
# SBOM-Workbench 中的本地密码学检测
## 概述
配置 API 密钥后,SBOM-Workbench 可以检测本地密码学。此功能支持检测代码库中的密码学算法和库。
## 默认和自定义检测规则
系统提供了用于检测密码学算法和库的默认规则。但是,可以在要扫描的项目根目录中定义自定义规则。
### 自定义规则文件
可以通过项目根目录中的以下 JSON 文件来定义自定义规则:
- **算法检测规则**:`scanoss-crypto-algorithm-rules.json`。请参阅:[Algorithm Rules Sample](./assets/data/scanoss-crypto-algorithm-rules.json)
- **库检测规则**:`scanoss-crypto-library-rules.json`
## 规则文件结构
### 算法规则结构
`scanoss-crypto-algorithm-rules.json` 的结构应按以下格式编写:
```
[
{
"algorithmId": "md5",
"algorithm": "MD5 Message-Digest Algorithm",
"strength": "128",
"keywords": [
"md5_file",
"md5",
"md5crypt",
"aprcrypt",
"md5_encrypt",
"md5_block_data_order",
"ossl_md5_sha1_",
"MD5_Init"
]
}
]
```
### 库规则结构
`scanoss-crypto-library-rules.json` 的结构应按以下格式编写:
```
[
{
"id": "library/webcrypto",
"name": "Web Cryptography API",
"description": "A JavaScript API for performing basic cryptographic operations in web applications.",
"keywords": [
"window.crypto.subtle",
"crypto.subtle.",
"crypto.getRandomValues",
"NodeWebCrypto",
"WebCryptoAPI"
],
"url": "https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API",
"category": "library",
"purl": "pkg:generic/webcrypto",
"tags": [
"JavaScript"
]
}
]
```
# SCANOSS 设置文件
SCANOSS 提供了一个设置文件来自定义扫描过程。该设置文件是一个 JSON 文件,包含项目信息和 BOM(物料清单)规则。它允许您在扫描前后包含、移除或替换 BOM 中的组件。
### 设置
``scanoss.json`` 对象允许您配置扫描过程的各个方面。目前,它通过 ``skip`` 属性控制哪些文件应在扫描期间被跳过。
### BOM 规则
``bom`` 部分定义了在扫描前后修改 BOM 的规则。它包含三个主要操作:
### 1. Include(包含)规则
用于在扫描时添加上下文的规则。这些规则将被发送到 SCANOSS API,这意味着它们更有可能被视为结果扫描的一部分。
```
{
"bom": {
"include": [
{
"path": "/path/to/file",
"purl": "pkg:npm/vue@2.6.12",
"comment": "Optional comment"
}
]
}
}
```
### 2. Remove(移除)规则
用于在扫描后从结果中移除文件的规则。这些规则将在扫描后应用于结果文件。后处理发生在客户端。
```
{
"bom": {
"remove": [
{
"path": "/path/to/file",
"purl": "pkg:npm/vue@2.6.12",
"comment": "Optional comment"
}
]
}
}
```
### 3. Replace(替换)规则
用于在扫描后替换组件的规则。这些规则将在扫描后应用于结果文件。后处理发生在客户端。
```
{
"bom": {
"replace": [
{
"path": "/path/to/file",
"purl": "pkg:npm/vue@2.6.12",
"replace_with": "pkg:npm/vue@2.6.14",
"license": "MIT",
"comment": "Optional comment"
}
]
}
}
```
# 匹配规则
1. **完全匹配**:要求 PATH 和 PURL 都匹配。这意味着该规则将仅应用于具有匹配的 PURL 和 PATH 的特定文件。
2. **部分匹配**:基于以下条件进行匹配:
- 仅 PURL(PATH 为可选)。这意味着该规则将应用于具有匹配 PURL 的所有文件。
## 配置示例
以下是一个展示所有部分的完整示例:
```
{
"bom": {
"include": [
{
"path": "src/lib/component.js",
"purl": "pkg:npm/lodash@4.17.21",
"comment": "Include lodash dependency"
}
],
"remove": [
{
"purl": "pkg:npm/deprecated-pkg@1.0.0",
"comment": "Remove deprecated package"
}
],
"replace": [
{
"path": "src/utils/helper.js",
"purl": "pkg:npm/old-lib@1.0.0",
"replace_with": "pkg:npm/new-lib@2.0.0",
"license": "MIT",
"comment": "Upgrade to newer version"
}
]
}
}
```
## 使用
您可以在项目根目录中添加您的 'scanoss.json'
# 命令行界面 (CLI)
SBOM Workbench 包含一个 CLI,用于在不启动图形界面的情况下管理配置。这对于自动化、脚本编写和无头环境非常有用。
## 获取帮助
```
# 显示所有可用命令
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage --help
```
## 平台注意事项
### Windows
在 Windows 上,Electron 应用程序默认作为 GUI 进程运行,不会附加控制台。这意味着:
- **修改配置的命令可以正常工作**(`config init`、`config api add`、`config api rm`、`config api default`)
- **显示输出的命令将不会显示结果**(`--help`、`--version`、`config api list`) - 在 cmd.exe 或 PowerShell 中没有可见输出
**Windows 示例:**
```
:: Initialize configuration
sbom-workbench-1.27.0-win-x64-app.exe config init
:: Add an API
sbom-workbench-1.27.0-win-x64-app.exe config api add --url=https://api.scanoss.com --key=YOUR_API_KEY --default
:: Remove an API by index
sbom-workbench-1.27.0-win-x64-app.exe config api rm --index=1
:: Set default API
sbom-workbench-1.27.0-win-x64-app.exe config api default --index=0
```
### Linux / macOS
在 Linux 和 macOS 上,CLI 输出会在终端中正常显示。两种参数语法均有效:
```
# Space 语法
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config api add --url https://api.scanoss.com --key YOUR_API_KEY
# Equals 语法(同样有效)
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config api add --url=https://api.scanoss.com --key=YOUR_API_KEY
```
#### Ubuntu 24.04+
在 Ubuntu 24.04 及更新版本上,AppImage 沙箱可能由于内核限制而无法工作。如果您遇到沙箱错误,请通过设置环境变量来禁用它:
```
export ELECTRON_DISABLE_SANDBOX=1
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config init
```
## 配置命令
### 初始化配置
在 `~/.scanoss/sbom-workbench-settings.json` 创建默认配置文件:
```
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config init
```
### API 管理
CLI 允许您管理多个 API 配置,以便连接到不同的 SCANOSS 服务器。
#### 列出已配置的 API
显示所有已配置的 API 及其索引:
```
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config api list
```
**示例输出:**
```
Configured APIs:
[0] https://api.scanoss.com [key set] (default)
[1] https://custom.scanoss-server.com
```
#### 添加 API
添加一个新的 API 配置:
```
# 仅使用 URL 添加 API(公共 SCANOSS API)
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config api add --url https://api.scanoss.com
# 使用 URL 和 API 密钥添加 API
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config api add --url https://api.scanoss.com --key YOUR_API_KEY
# 添加 API 并将其设置为默认值
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config api add --url https://custom.server.com --key YOUR_KEY --default
```
#### 移除 API
通过其索引移除 API 配置:
```
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config api rm --index 1
```
#### 设置默认 API
更改默认使用的 API:
```
./sbom-workbench-1.27.0-linux-x86_64-app.AppImage config api default --index 0
```
## [协作工作区](COLLAB_WORKSPACE.md)
SBOM Workbench 包含对协作工作区的支持,这是一项旨在增强团队协作的功能。在[此处](COLLAB_WORKSPACE.md)查看更多详细信息。
## 代码查看器键盘快捷键
代码查看器支持以下用于缩放的键盘快捷键:
| 操作 | macOS | Windows/Linux |
|--------|-------|---------------|
| 放大 | `Cmd + +` | `Ctrl + +` |
| 缩小 | `Cmd + -` | `Ctrl + -` |
| 重置缩放 | `Cmd + 0` | `Ctrl + 0` |
您也可以使用 `Ctrl/Cmd + 鼠标滚轮` 进行缩放。按 `F1` 打开命令面板并查看所有可用命令。
## 贡献
SBOM Workbench 是一个开源项目,我们非常乐意接受来自社区的贡献。贡献的方式有很多。有关更多信息,请参阅[贡献指南](CONTRIBUTING.md)和[行为准则](CODE_OF_CONDUCT.md)。
## 文档
本项目使用 Electron React Boilerplate 制作
请参阅[此处的文档和指南](https://electron-react-boilerplate.js.org/docs/installation)


[](https://api.reuse.software/info/github.com/scanoss/sbom-workbench)

SBOM Workbench 是一个图形用户界面,用于通过 SCANOSS API 扫描和审计源代码。
审计源代码的许可证合规性从未如此简单。只需扫描您的源代码目录即可查找和识别开源组件。只需按下一个按钮,即可生成 SPDX-Lite 软件物料清单 (SBOM)。
_请前往 [Software Transparency Foundation](https://www.softwaretransparency.org/download) 获取适用于所有平台的预构建二进制文件_
标签:Electron, GNU通用公共许可证, IPv6支持, MITM代理, MUI, Node.js, npm, nvm, React, Redis利用, SBOM, SBOM Workbench, SBOM生成, SCANOSS, SPDx, SQLite3, Syscalls, 图形用户界面, 开源合规, 开源组件识别, 源码扫描, 硬件无关, 组件分析, 网络安全, 自动化攻击, 许可证审计, 跌倒检测, 软件物料清单, 软件透明度, 隐私保护