npm 审计是否有纱线替代方案?

is there a yarn alternative for npm audit?

需要 yarn 的固定分辨率功能,但还想用 npm audit 进行审核? npm audit 有纱线替代品吗?或者,在 npm?

中,依赖项的依赖项的固定解决方案是否有效?

我认为它在 yarn 上还没有准备好。您可以参考以下问题。 https://github.com/yarnpkg/yarn/issues/5808

yarn audit / yarn install --audit 从 yarn@1.12.0

开始可用

https://github.com/yarnpkg/yarn/releases/tag/v1.12.0

很遗憾,目前还没有 --fix 选项,但作为解决方法,您可以使用 https://www.npmjs.com/package/yarn-audit-fix

是的,您可以使用 yarn audit 来审核漏洞,但您不能像在 npm audit fix.

中那样使用 yarn audit fix 修复漏洞

要修复 yarn.lock 文件中的漏洞,您必须使用 yarn add package_name

将包含漏洞的软件包重新安装到其更新版本

您可以在此处阅读问题 => https://github.com/yarnpkg/yarn/issues/7075

您可以使用其他答案中提到的yarn audit,但是,有不同的方法来解决它们...

你需要添加resolution指令来指定解决漏洞的库的版本和依赖的路径(因为库可以是另一个依赖的依赖,例如:

考虑部分package.json以下

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": {
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  },
  "resolutions": {
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "^1.1.2"
  }
}

更多细节可以直接在文档中查看:Doc

Yarn 没有 npm audit fix.

但这是暂时使用 npm 的方法。

  1. 生成 package-lock.json 文件而不安装节点模块
npm i --package-lock-only
  1. 修复包并更新 package-lock.json 文件
npm audit fix
  1. 删除yarn.lock文件并将package-lock.json文件转换成yarn.lock
rm yarn.lock
yarn import
  1. 删除 package-lock.json 文件
rm package-lock.json

例如:

yarn audit

38363 vulnerabilities found - Packages audited: 908342
Severity: 38352 Low | 11 Moderate

(我知道。react-scripts 疯了...)

npm audit
npm ERR! code EAUDITNOLOCK
npm ERR! audit Neither npm-shrinkwrap.json nor package-lock.json found: Cannot audit a project without a lockfile
npm ERR! audit Try creating one first with: npm i --package-lock-only
npm i --package-lock-only

...
added 266 packages, removed 354 packages, updated 1653 packages, moved 1 package and audited 913793 packages in 54.304s
found 495 low severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details
npm audit fix

...
added 267 packages from 152 contributors, removed 355 packages and updated 1712 packages in 92.849s

50 packages are looking for funding
  run `npm fund` for details

fixed 211 of 495 vulnerabilities in 913793 scanned packages
  284 vulnerabilities required manual review and could not be updated
git status -s

?? package-lock.json
yarn import

yarn import v1.21.1
info found npm package-lock.json, converting to yarn.lock
...
success Saved lockfile.
✨  Done in 25.61s
rm package-lock.json

做一个yarn audit并找到有漏洞的包,

如果它们在您的 package.json 文件中

  • 从那里修复他们的版本

其他

  • 它们是您的包的依赖项,因此将其添加到 package.json 文件
"resolutions": {
    "**/package-name": "known-good-version",
    "**/**/package-name": "known-good-version"
 }

Yarn 目前不支持修复,

解决方法

  • 使用 npm 创建一个包-lock.json 文件。
  • 修复软件包
  • 删除 package-lock.json.

.

npm i --package-lock-only
npm audit fix
rm package-lock.json

开始

yarn start

第一

始终使用源代码管理并首先检查您的 package.json 以及您的 yarn.lock and/or package-lock.json 并从所有已提交的文件开始,以便您可以回滚如果需要,请轻松。

不向项目添加依赖项(也不安装第三方库)的解决方案怎么样?

yarn outdated         # view
yarn audit            # view 
yarn install --audit  # install

更喜欢交互式的方式来轻松地有选择地升级?

yarn upgrade-interactive

这可能会满足您的所有需求。

奇怪的是,您可能会发现在该命令后使用 yarn audit,您仍然有一些未在命令 yarn upgrade-interactive 中提及的漏洞。在这种情况下,我会首先考虑这个:

yarn upgrade-interactive --latest

where that can be found

还是不够好? ``` 纱线升级--最新 ```

我见过很多其他可能的解决方案,之前我只是按照一些用户的建议暂时从 yarn 切换到 npm,然后切换回 yarn .这对我也很有效。 (虽然烦人不优雅)

有些软件包不需要安装到 运行。 这个我没试过,应该也不错:

npm_config_yes=true npx yarn-audit-fix

ref

这里的关键是您正在使用 npx 来避免安装为依赖项。

还有很多可能的解决方案。 npmyarn 都是包管理器,依赖管理是一件非常困难的事情,自动修复这些依赖永远是一个很难解决的问题。因此,如果您有时间,我建议您对他们如何实际解决这些问题进行一些研究。您可能会发现自己不喜欢他们做事的方式。

最终,只要你能回滚,你就可以尝试很多这些,然后自己看看。一些包的严重程度可能不需要修复,有时库还没有可用的解决方案,那么你需要考虑在你的代码库中删除它们的使用。从理论上讲,少即是多,对使用库的库的依赖性越小,使用库的库就越少......成为攻击者目标的更小表面。此外,不建议使用来自不受信任来源的库,npmyarn 等无法知道所有内容,也不能立即知道,因此也要考虑到这一点。

Yarn 也有yarn audit 机制,但它没有yarn audit fix 机制。所以在大多数情况下,您必须手动修复这些问题。这就是它的工作原理。例如,我们将使用 minimist 包进行演示:

  • 在您的 package.json 文件中添加一个 resolutions 键:
  1. 直接添加依赖项(例如 minimist)作为键值。此解决方案将完全覆盖您项目中的 minimist
{
  "resolutions": {
    "minimist": "^1.2.5"
  }
}
  1. 在大多数情况下,一个项目中可以有多个依赖项使用相同的次级依赖项,但是,它们可能使用这些依赖项的不同版本。值得庆幸的是,yarn/npm 允许我们有选择性的依赖性解决方案。

定义resolutions的格式如下:

/* package.json */
{
  "resolutions": {
    "<package>/**/<dependency>": "<version>"
  }
}

例如,我们有一个依赖项 AB,它们都依赖于另一个依赖项 C.

那么我们的决议字段将如下所示:

/* package.json */
{
  "resolutions": {
    "A/**/C": "2.0.3", // A works fine with the latest version of C
    "B/**/C": "1.9.0" // latest stable version for C for dependency B
  }
}

让我们以 package-merge-lodash-4 包为例进一步了解它是如何工作的。如果审计说 lodash@3.9.3 存在漏洞并建议我们升级 lodash@3.9.3 -> 4.17.12.

我们可以只为相关包编写 json 文件的分辨率,如下所示:

{
  "resolutions": {
    "package-merge-lodash-4/**/lodash": "4.17.12"
  }
}
  1. 如何使用Selective dependency resolutions in npm?

add npm-force-resolutions to the preinstall script after you added resolutions key to package.json file, so that it patches the package-lock file before every npm install you run:

"scripts": {
  "preinstall": "npx npm-force-resolutions"
}

要确认安装了正确的版本,请使用以下命令

npm ls <vulnerable dependency>
npm ls lodash

资源: