纱线升级以修复纱线审计错误

时间:2019-03-12 23:02:21

标签: javascript npm gulp yarnpkg npm-audit

因此,到目前为止,似乎还没有yarn audit --fix,所以我试图弄清楚如何解决我的yarn audit错误。

我尝试过yarn upgrade,它已修复了一些错误(很好),但仍然存在一些错误。

然后,我尝试使用yarn add <package>@latest来修复其余的高漏洞,但是当我认为问题来自我所使用的软件包的依赖关系时,它将升级我的package.json中的版本。 / p>

以下是我一些剩余错误的示例:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ minimatch                                                    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=3.0.2                                                      │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ gulp > vinyl-fs > glob-stream > glob > minimatch             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/118                       │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ minimatch                                                    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=3.0.2                                                      │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ gulp > vinyl-fs > glob-stream > minimatch                    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/118                       │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ minimatch                                                    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=3.0.2                                                      │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ gulp > vinyl-fs > glob-watcher > gaze > globule > glob >     │
│               │ minimatch                                                    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/118                       │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ minimatch                                                    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=3.0.2                                                      │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ gulp > vinyl-fs > glob-watcher > gaze > globule > minimatch  │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/118                       │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ moderate      │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.11                                                    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ gulp > vinyl-fs > glob-watcher > gaze > globule > lodash     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/782                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

2 个答案:

答案 0 :(得分:9)

虽然resolutions有效,但这不是最佳解决方案,因为:

  • 您的package.json带有传递依赖项的解决方法
  • 您用您认为可行的版本覆盖实际需要的版本。假设A依赖于B@^4.0.0,然后更新B并将其解析为^4.3.2。稍后,A得到更新并需要B@^5.0.0,但您仍将B解析为^4.3.2,这不再兼容。

这是更新传递依赖项的另一种方法:

  1. yarn.lock删除要更新的依赖项的版本
  2. 运行yarn install

通过这种方式,您可以迫使yarn再次解决依赖关系,并且在大多数情况下,yarn将安装从yarn.lock中删除的更新版本。

示例:假设您要更新易受攻击的minimist@0.0.8,然后需要从yarn.lock删除这样的条目:

minimist@0.0.8:
  version "0.0.8"
  resolved "http://10.0.0.1/repository/npm-registry/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
  integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=

然后运行yarn install

如果这没有帮助:

尝试更新依赖关系链中更高的依赖关系:

  1. 运行yarn why <dependency>找出哪些包将其拉出
  2. 上链并尝试从yarn.lock删除链中的上层依赖项,然后运行yarn install

示例:

这里是一个示例,其中我们更新了传递依赖项minimist

$ yarn why minimist
.....
=> Found "mkdirp#minimist@0.0.8"
info This module exists because "eslint#mkdirp" depends on it.
=> Found "optimist#minimist@0.0.10"
info This module exists because "jest#jest-cli#@jest#core#@jest#reporters#istanbul-reports#handlebars#optimist" depends on it.
.....
  1. 从yarn.lock删除minimist项并运行yarn install->这无济于事,可能是因为mkdirpoptimist恰好需要minimist@0.0.8minimist@0.0.10
  2. 从yarn.lock:minimistmkdirp中删除optimist的“直接父母”。
  3. 运行yarn install
  4. 再次运行yarn why minimist

    $ yarn why minimist
    .....
    => Found "mkdirp#minimist@1.2.5"
    info This module exists because "eslint#mkdirp" depends on it.
    => Found "optimist#minimist@0.0.10"
    info This module exists because "jest#jest-cli#@jest#core#@jest#reporters#istanbul-reports#handlebars#optimist" depends on it.
    .....
    

    在这里我们看到minimist@0.0.8已更新为minimist@1.2.5,但是minimist@0.0.10仍然存在。

  5. yarn.lockhandlebars

  6. 删除依赖关系链中的下一个依赖关系
  7. 运行yarn install
  8. 运行yarn why minimist-没什么变化,minimist@0.0.10仍然在那里。
  9. yarn.lock中删除链中的下一个依赖项:istanbul-reports
  10. 运行yarn install
  11. 运行yarn why minimistminimist@0.0.10不再存在,因为istanbul-reports已更新。

答案 1 :(得分:0)

在纱线中解决此问题的方法称为selective version resolutions,基本上是为resolutions中的传递依存关系定义package.json

transitive dependencies是依赖项的依赖项。

{
   "resolutions": { "**/**/lodash": "^4.17.12" }
}

因此在这里,即使lodash不是您程序包的直接依赖项,您程序包中的依赖程序包也使用决议中定义的版本。也可以提供特定的分辨率。更多信息here