web-dev-qa-db-ja.com

糸の監査エラーを修正するための糸のアップグレード

そのため、現時点ではyarn audit --fixがないようですので、yarn auditエラーを修正する方法を見つけようとしています。

私はいくつかのエラーを修正したyarn upgradeを試しましたが(それは素晴らしいことです)、まだいくつか残っています。

次に、残りの高い脆弱性に対してyarn add <package>@latestを試しましたが、使用しているパッケージの依存関係から問題が発生していると思われる場合は、package.jsonのバージョンをアップグレードします。

ここに私の残りのエラーのいくつかの例があります:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ 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                       │
└───────────────┴──────────────────────────────────────────────────────────────┘
24
Ken Bigler

糸のこの問題の解決策は 選択的なバージョンの解像度 と呼ばれ、package.jsonの推移的な依存関係に対して基本的にresolutionsを定義しています。

transitive dependenciesは依存関係の依存関係です。

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

したがって、ここでロダッシュがパッケージの直接の依存関係ではない場合でも、パッケージ内の依存パッケージは、解像度で定義されたバージョンを使用します。特定の解像度も提供できます。詳細 ここ

25
acesmndr

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_から削除したものの新しいバージョンをインストールします。

:脆弱な_[email protected]_を更新する場合、_yarn.lock_からこのようなエントリを削除する必要があります:

_[email protected]:
  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#[email protected]"
info This module exists because "eslint#mkdirp" depends on it.
=> Found "optimist#[email protected]"
info This module exists because "jest#jest-cli#@jest#core#@jest#reporters#istanbul-reports#handlebars#optimist" depends on it.
.....
_
  1. minimistエントリをyarn.lockから削除して_yarn install_を実行します。これは役に立ちません。おそらく、mkdirpoptimistには正確に_[email protected]_と_[email protected]_が必要なためです
  2. minimistの「直接の親」をyarn.lockから削除します:mkdirpおよびoptimist
  3. _yarn install_を実行します。
  4. _yarn why minimist_をもう一度実行します。

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

    ここでは、_[email protected]_が_[email protected]_に更新されましたが、_[email protected]_はまだ存在しています。

  5. 依存関係チェーンの次の依存関係を_yarn.lock_から削除します:handlebars

  6. _yarn install_を実行します
  7. _yarn why minimist_を実行します-何も変更されず、_[email protected]_がまだ残っています。
  8. チェーン内の次の依存関係を_yarn.lock_から削除します:_istanbul-reports_
  9. _yarn install_を実行します
  10. _yarn why minimist_が更新されたため、_[email protected]_を実行:_istanbul-reports_はもうありません。
1
Andrey Vetlugin