Blackduck Synopsys Yarn Detector 找不到项目版本名称
Posted
技术标签:
【中文标题】Blackduck Synopsys Yarn Detector 找不到项目版本名称【英文标题】:Blackduck Synopsys Yarn Detector cannot find project version name 【发布时间】:2021-11-19 23:05:06 【问题描述】:我在 Create-React-App 应用程序上使用 Blackduck 5.6.2 版,并使用 yarn v1.22.11 安装了依赖项。
Blackduck 在 GitLab CI 管道中作为作业执行。以前,我在运行扫描之前使用 npm 在 blackduck 步骤中安装包。 Blackduck 扫描仪无需任何显式配置即可获取项目名称和版本号。
我最近从 NPM 更改为 yarn 以利用选择性依赖解析功能来尝试克服 Blackduck 扫描器报告的嵌套依赖。一旦我将 Blackduck 步骤转换为使用纱线,Blackduck 就会在我的存储库中拾取 yarn.lock
和 package.json
文件以使用 Yarn 检测器,从输出中可以看出这一点(以及根据
Synopsys' documentation)。但是,它不再能够正确获取项目版本名称。
以下是表明这一点的消息:
2021-09-27 19:13:47 INFO [main] --- Determining project info.
2021-09-27 19:13:47 INFO [main] --- A project name could not be decided. Using the name of the source path.
2021-09-27 19:13:47 INFO [main] --- A project version name could not be decided. Using the default version text.
测试完成后,我访问 blackduck Web 控制台查看测试结果,我现在看到“默认检测版本”作为版本名称,而不是我之前的版本号。
我已尝试将 -detect.project.version.notes=./package.json
参数传递到启动 blackduck 扫描仪 shell 脚本的步骤中,但它仍然使用“默认检测版本”作为版本名称。
纱线检测器的文档在指定包含和排除工作区的参数、纱线二进制文件的路径以及是否应包含生产依赖项后停止。
有谁知道为什么 Yarn 检测器无法从 package.json
获取版本号,以及如何在不将硬编码值作为参数传递给扫描仪 shell 脚本的情况下解决此问题?
【问题讨论】:
【参考方案1】:通过执行以下操作,我能够解决项目名称和版本问题以及 blackduck 扫描程序报告嵌套依赖项中的漏洞
从使用 yarn 切换到 npm 安装包。
这允许 NPM 检测器利用 package.json
和 package-lock.json
自动确定项目名称和版本。
在启动 shell 脚本时将以下标志添加到 blackduck 扫描器。
--detect.npm.include.dev.dependencies=false
--detect.npm.include.peer.dependencies=false
例子:
bash <(curl -s https://detect.synopsys.com/detect.sh) --blackduck.url="$BLACKDUCK_HUB_URL" --blackduck.username="$BLACKDUCK_HUB_USER" --blackduck.password="$BLACKDUCK_HUB_PASS" --blackduck.trust.cert=true --detect.policy.check=true --detect.hub.signature.scanner.paths=./ --detect.npm.include.dev.dependencies=false --detect.npm.include.peer.dependencies=false
这将指示 blackduck 扫描器不查看 dev 依赖项和嵌套依赖项。
补充说明
不需要使用 npm-forced-resolutions 或 yarn 的选择性依赖解析;为了将来参考,未提及 npm 的“覆盖”功能,因为在编写此答案时尚未实现它。
如果您使用 create-react-app,请确保将 react-scripts
从依赖项移至 devDependencies(as per Dan Abramov's recommendation 以解决此问题)。您可以通过运行npm uninstall react-scripts
来执行此操作,然后运行npm install --save-dev react-scripts
或npm install --save-dev react-scripts@<specific version>
【讨论】:
【参考方案2】:首先让我为您指出 Synopsys 社区门户,这是提出这些问题并获得答案的最佳和最快的地方 https://community.synopsys.com/s/。完全公开,我在 Synopsys 工作,并参与了 Black Duck 产品。
请问您列出的“5.6.2”版本是指 Synopsys Detect 扫描工具还是 Black Duck 本身?我问最新版本的 Black Duck 2021.8.2 和检测 7.5.0 确实支持从 yarn.lock 和/或 package.json 中提取项目版本名称,您不需要提供任何额外的参数来自动检测拿起这个。
另外需要注意的是,通常您应该在运行检测之前在您的项目上运行 yarn 命令。这会在 Black Duck 中产生更准确的分析结果,并使用您的常规包管理器工具解决依赖关系。这意味着检测将从 yarn.lock 文件而不是 package.json 文件中提取项目名称和版本信息。更多详情,您可以在此处查看此页面https://synopsys.atlassian.net/wiki/spaces/INTDOCS/pages/631275892/Detectors
【讨论】:
嗨@Grant,感谢您花时间回答我的问题。当我提到“版本 5.6.2”时,这是指 Synopsys Detect 扫描工具。我正在使用 blackduck v2021.6.2。目前,我确实运行 yarn install 命令来获取在运行 blackduck 扫描之前下载的所有包。此外,我尝试使用“npm-forced-resolutions”作为使用 yarn 的“选择性依赖解析”功能的替代方案,但 blackduck 仍然在嵌套依赖项中检测这些包的易受攻击版本。 我要解决的主要问题是这些嵌套的易受攻击的依赖项来自我们的项目使用的 npm 包,我们的团队无法控制这些包。此外,这些包仅用于开发,并未打包到生产版本中。然而,由于我公司对 Blackduck 检测到的漏洞零容忍的政策,它们不能被忽视。有没有办法让我忽略嵌套的开发依赖项? 嗨@Alex 感谢您的确认。首先,我强烈建议您考虑升级到比 Black Duck 2021.6.2 早几年的检测 5.6.2 的较新版本,并且可能存在兼容性问题。至于如何使用 yarn 或 npm 排除开发依赖项,您可以使用检测选项 --detect.yarn.prod.only=true & --detect.npm.include.dev.dependencies=false。 Detect/Black Duck 将始终显示传递组件的依赖关系,因此,如果 black duck 使用这些选项识别这些组件,那么这些组件很可能包含在您构建的应用程序中。以上是关于Blackduck Synopsys Yarn Detector 找不到项目版本名称的主要内容,如果未能解决你的问题,请参考以下文章
附录A:Synopsys Design Constraints(SDC)