web-dev-qa-db-fra.com

mise à niveau du fil pour corriger les erreurs d'audit du fil

Donc, pour l'instant, il semble qu'il n'y ait pas de yarn audit --fix, donc j'essaie de comprendre comment réparer mon yarn audit les erreurs.

J'ai essayé un yarn upgrade qui a corrigé certaines erreurs (ce qui est bien), mais il en reste encore plusieurs.

J'ai ensuite essayé un yarn add <package>@latest pour les vulnérabilités élevées restantes, mais il met à niveau la version dans mon package.json, quand je pense que le problème vient d'une dépendance d'un paquet que j'utilise.

Voici un exemple de certaines de mes erreurs restantes:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ 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

La solution à ce problème dans le fil s'appelle résolutions de versions sélectives qui définit fondamentalement resolutions pour les dépendances transitives dans le package.json.

Le transitive dependencies sont les dépendances des dépendances.

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

Ainsi, même si le lodash n'est pas une dépendance directe de votre package, le package dépendant de votre package utilise la version définie dans les résolutions. Des résolutions spécifiques peuvent également être fournies. Plus d'informations ici .

25
acesmndr

Bien que resolutions fonctionne, ce n'est pas la solution optimale, car:

  • vous encombrez votre package.json avec des résolutions de dépendances transitives
  • vous remplacez la version réellement requise par ce que vous pensez fonctionnera la version . Supposons que A dépend de B@^4.0.0 Et que vous mettez à jour B et le résolvez en ^4.3.2. Quelque temps plus tard, A obtient une mise à jour et nécessite B@^5.0.0, Mais vous résolvez toujours B en ^4.3.2, Qui n'est plus compatible.

Voici une autre façon de mettre à jour les dépendances transitives:

  1. supprimez la version de la dépendance que vous souhaitez mettre à jour de yarn.lock
  2. exécutez yarn install

De cette façon, vous forcez Yarn à résoudre à nouveau la dépendance et dans la plupart des cas, Yarn installera une version plus récente de ce que vous avez supprimé de yarn.lock.

Exemple: supposons que vous vouliez mettre à jour [email protected] Vulnérable, alors vous devez supprimer une entrée comme celle-ci de votre 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=

puis exécutez yarn install.

Si cela n'aide pas:

Essayez de mettre à jour les dépendances plus élevées dans la chaîne de dépendance:

  1. Exécutez yarn why <dependency> Pour savoir quels paquets le tirent
  2. Remontez la chaîne et essayez de supprimer la dépendance supérieure de la chaîne de yarn.lock Puis d'exécuter yarn install

Exemple:

Voici un exemple, où nous mettons à jour une dépendance transitive 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. Supprimez les entrées minimist de yarn.lock et exécutez yarn install -> cela n'aide pas, probablement parce que mkdirp et optimist nécessitent exactement [email protected] et [email protected]
  2. Supprimez les "parents directs" de minimist de yarn.lock: mkdirp et optimist.
  3. Exécutez yarn install.
  4. Exécutez à nouveau 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.
    .....
    

    Ici, nous voyons que [email protected] A été mis à jour vers [email protected], Mais [email protected] Existe toujours.

  5. Supprimez la dépendance suivante dans la chaîne de dépendances de yarn.lock: handlebars

  6. Exécutez yarn install
  7. Exécutez yarn why minimist - rien n'a changé, [email protected] Est toujours là.
  8. Supprimez la dépendance suivante de la chaîne de yarn.lock: istanbul-reports
  9. Exécutez yarn install
  10. Exécutez yarn why minimist: [email protected] N'est plus là, car istanbul-reports A été mis à jour.
1
Andrey Vetlugin