Übung: Verwalten von Updates der Abhängigkeiten im Node.js-Paket
Tailwind Traders hat Sie beauftragt, an einer App mit veralteten Abhängigkeiten zu arbeiten. Die App ist klein und weist nur wenige Abhängigkeiten auf. Das Aktualisieren des Codes sollte einfach sein. Sie werden versuchen, die App zu aktualisieren, damit die neuesten Features verwendet werden können. Währenddessen beheben Sie jegliche Sicherheitsrisiken, die Sie finden.
Erste Schritte
Wechseln Sie in einem neuen Terminalfenster (STRG + UMSCHALT + `) zum Ordner, der die Dateien für diese Übung enthält:
cd ../7-exercise-dependency-management
Installieren Sie die Abhängigkeiten, indem Sie den folgenden Befehl ausführen:
npm install
Die Ausgabe der installierten Pakete und alle Sicherheitsrisiken sollten angezeigt werden.
Öffnen Sie die Datei „package.json“, und sehen Sie sich den Abschnitt
dependencies
an."lodash": "^1.1.0", "node-fetch": "^1.0.2"
Beachten Sie, dass die Muster das Einfügezeichen (^) enthalten, das Aktualisierungen der Nebenversion angibt, um Abhängigkeiten zu unterstützen:
1.x
.Öffnen Sie die Datei index.js, um zu verstehen, wie die Paketabhängigkeiten in der App verwendet werden:
const fetch = require('node-fetch') const _ = require('lodash'); const path = require('path'); const fs = require('fs'); async function run() { const response = await fetch("https://dev.to/api/articles?state=rising"); const json = await response.json(); const sorted = _.sortBy(json, ["public_reactions_count"], ['desc']); const top3 = _.take(sorted, 3); const filePrefix = new Date().toISOString().split('T')[0]; fs.writeFileSync(path.join(__dirname, `${filePrefix}-feed.json`), JSON.stringify(top3, null, 2)); } run();
Dieser Code zieht Daten mithilfe des
node-fetch
-Paket aus einer REST-API. Die Antwort wird verarbeitet, indem diese mithilfe deslodash
-Pakets sortiert wird und dann die drei obersten Ergebnisse ausgewählt werden. Das Ergebnis wird in einer Datei gespeichert.
npm-Audit
Führen Sie den folgenden Befehl aus, um zu verstehen, ob Sicherheitsrisiken vorhanden sind:
npm audit
Die Ausgabe sollte folgendem Beispiel entsprechen:
# npm audit report
lodash <=4.17.20
Severity: critical
Regular Expression Denial of Service (ReDoS) in lodash - https://github.com/advisories/GHSA-x5rq-j2xg-h7qm
Prototype Pollution in lodash - https://github.com/advisories/GHSA-fvqr-27wr-82fm
Prototype Pollution in lodash - https://github.com/advisories/GHSA-jf85-cpcp-j695
Command Injection in lodash - https://github.com/advisories/GHSA-35jh-r3h4-6jhm
Prototype Pollution in lodash - https://github.com/advisories/GHSA-4xc9-xhrj-v574
Regular Expression Denial of Service (ReDoS) in lodash - https://github.com/advisories/GHSA-29mw-wpgm-hmr9
fix available via `npm audit fix --force`
Will install lodash@4.17.21, which is a breaking change
node_modules/lodash
node-fetch <=2.6.6
Severity: high
The `size` option isn't honored after following a redirect in node-fetch - https://github.com/advisories/GHSA-w7rc-rwvf-8q5r
node-fetch forwards secure headers to untrusted sites - https://github.com/advisories/GHSA-r683-j2x4-v87g
fix available via `npm audit fix --force`
Will install node-fetch@3.3.2, which is a breaking change
node_modules/node-fetch
2 vulnerabilities (1 high, 1 critical)
To address all issues (including breaking changes), run:
npm audit fix --force
Die Ausgabe gibt die Sicherheitsanfälligkeiten und die Version des Pakets an, welches das Problem behebt.
Will install lodash@4.17.21, which is a breaking change
Will install node-fetch@3.3.2, which is a breaking change
npm veraltet
Führen Sie im Terminal diesen Befehl aus, um nach veralteten Abhängigkeiten zu suchen:
npm outdated
Die Ausgabe sollte folgendem Beispiel entsprechen:
Package Current Wanted Latest Location Depended by
lodash 1.3.1 1.3.1 4.17.21 node_modules/lodash 7-exercise-dependency-management
node-fetch 1.7.3 1.7.3 3.3.2 node_modules/node-fetch 7-exercise-dependency-management
Die aktuellen und erwünschten Versionen sind identisch, aber die neueste Version unterscheidet sich. Die in der package.json
angegebene Semantikaktualisierungsstrategie wurde erfüllt, aber die Sicherheitsanfälligkeiten sind weiterhin vorhanden.
npm aktualisieren
Bearbeiten Sie die
package.json
-Datei explizit, um wichtige Änderungen zu ermöglichen, um die Sicherheitsanfälligkeiten zu beheben, beginnend mit dem erheblicheren Paket:"node-fetch": "^2.6.6"
Führen Sie diesen Befehl aus, um zu sehen, was das Update bewirken würde:
npm update --dry-run
added 3 packages, removed 4 packages, and changed 1 package in 508ms
Führen Sie diesen Befehl aus, um das Projekt basierend auf
package.json
zu aktualisieren:npm update
Führen Sie diesen Befehl aus, um zu sehen, ob die Sicherheitsanfälligkeit für
node-fetch
behoben wurde:npm audit
# npm audit report lodash <=4.17.20 Severity: critical Regular Expression Denial of Service (ReDoS) in lodash - https://github.com/advisories/GHSA-x5rq-j2xg-h7qm Prototype Pollution in lodash - https://github.com/advisories/GHSA-fvqr-27wr-82fm Prototype Pollution in lodash - https://github.com/advisories/GHSA-jf85-cpcp-j695 Command Injection in lodash - https://github.com/advisories/GHSA-35jh-r3h4-6jhm Prototype Pollution in lodash - https://github.com/advisories/GHSA-4xc9-xhrj-v574 Regular Expression Denial of Service (ReDoS) in lodash - https://github.com/advisories/GHSA-29mw-wpgm-hmr9 fix available via `npm audit fix --force` Will install lodash@4.17.21, which is a breaking change node_modules/lodash 1 critical severity vulnerability To address all issues (including breaking changes), run: npm audit fix --force
Wenn Ihr Projekt Tests enthält, führen Sie sie aus, um zu überprüfen, dass das Update keine Störungen verursacht hat.
Führen Sie die gleichen Schritte aus, um
lo-dash
ohne Sicherheitsrisiken auf die4.17.20
-Version zu aktualisieren.Die Sicherheitsanfälligkeiten wurden behoben, aber die
node-fetch
-Version hängt immer noch eine Hauptversion zurück. Wenn alle Ihre Tests bestanden werden, korrigieren Sie die in derpackage.json
-Datei angegebene Version auf die neueste Version:"node-fetch": "^3.3.2"
Führen Sie dann den folgenden Befehl aus, um das Projekt zu aktualisieren:
npm update
Ihr Projekt sollte jetzt keine npm-Sicherheitsrisiken aufweisen und die aktuelle Hauptversion haben.
Überprüfen Sie Ihre
package.json
- undpackage-lock.json
-Dateien.Herzlichen Glückwunsch! Sie haben die Abhängigkeiten aktualisiert und die Sicherheitsrisiken im Projekt behoben.
Bereinigung des Entwicklungscontainers
Nach Abschluss des Projekts können Sie Ihre Entwicklungsumgebung bereinigen oder wieder in den normalen Zustand versetzen.
Durch das Löschen der GitHub Codespaces-Umgebung wird sichergestellt, dass Sie die Anzahl der kostenlosen Berechtigungsstunden pro Kern maximieren können, die Sie für Ihr Konto erhalten.
Wichtig
Weitere Informationen zu den Berechtigungen Ihres GitHub-Kontos finden Sie im Artikel zu monatlich enthaltener Speicherkapazität und Kernstunden in GitHub Codespaces.
Melden Sie sich beim GitHub Codespaces-Dashboard (https://github.com/codespaces) an.
Öffnen Sie das Kontextmenü für den Codespace, und wählen Sie Löschen aus.