Oefening: Updates van afhankelijkheden in uw Node.js-project beheren
Tailwind Traders heeft u gevraagd om met een app te werken die verouderde afhankelijkheden heeft. De app is klein en heeft slechts enkele afhankelijkheden. Het bijwerken van de code moet eenvoudig zijn. Controleer of u de app kunt bijwerken om te profiteren van de nieuwste functies. En nu u toch bezig bent kunt u beveiligingsproblemen ook meteen oplossen, mocht u ze tegenkomen.
Aan de slag
Ga in een nieuw terminalvenster (Ctrl + Shift + `) naar de map met de bestanden voor deze oefening:
cd ../7-exercise-dependency-management
Installeer de afhankelijkheden door deze opdracht uit te voeren:
npm install
Als het goed is, ziet u uitvoer over de geïnstalleerde pakketten en eventuele beveiligingsproblemen.
Open het bestand package.json en bekijk de
dependencies
sectie:"lodash": "^1.1.0", "node-fetch": "^1.0.2"
U ziet dat in de patronen het invoegteken (^) wordt opgegeven, waarmee updates voor de secundaire versie worden aangegeven ter ondersteuning van afhankelijkheden:
1.x
.Open het bestand index.js om te begrijpen hoe de pakketafhankelijkheden worden gebruikt in de app:
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();
Met deze code worden gegevens opgehaald uit een REST API met behulp van het
node-fetch
pakket. Het antwoord wordt verwerkt door het te sorteren en de drie belangrijkste resultaten te gebruiken met behulp van hetlodash
pakket. Het resultaat wordt opgeslagen in een bestand.
npm-controle
Als u wilt weten of er beveiligingsproblemen zijn, voert u deze opdracht uit:
npm audit
De uitvoer moet er ongeveer uitzien als in dit voorbeeld:
# 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
In de uitvoer worden de beveiligingsproblemen en de versie van het pakket vermeld waarmee het probleem wordt opgelost.
Will install lodash@4.17.21, which is a breaking change
Will install node-fetch@3.3.2, which is a breaking change
npm verouderd
Voer in de terminal deze opdracht uit om te controleren op verouderde afhankelijkheden:
npm outdated
De uitvoer moet er ongeveer uitzien als in dit voorbeeld:
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
De huidige en gewenste versies zijn hetzelfde, maar de nieuwste versie is anders. Er is voldaan aan de semantische updatestrategie die in de package.json
strategie is opgegeven, maar de beveiligingsproblemen bestaan nog steeds.
npm-update
Bewerk het
package.json
bestand zodat belangrijke wijzigingen expliciet de beveiligingsproblemen kunnen oplossen, te beginnen met het belangrijkere pakket:"node-fetch": "^2.6.6"
Voer deze opdracht uit om te zien wat de update zou doen:
npm update --dry-run
added 3 packages, removed 4 packages, and changed 1 package in 508ms
Voer deze opdracht uit om het project bij te werken op basis van het
package.json
volgende:npm update
Voer deze opdracht uit om te zien of het beveiligingsprobleem
node-fetch
is opgelost: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
Als uw project tests heeft, voert u deze uit om te controleren of de update niets heeft verbroken.
Gebruik dezelfde stappen om bij te werken
lo-dash
naar de4.17.20
versie zonder beveiligingsproblemen.De beveiligingsproblemen zijn opgelost, maar de
node-fetch
versie is nog steeds een primaire versie. Als al uw tests zijn geslaagd, corrigeert u de versie die in hetpackage.json
bestand is opgegeven naar de nieuwste versie:"node-fetch": "^3.3.2"
Voer vervolgens de volgende opdracht uit om het project bij te werken:
npm update
Uw project moet nu geen npm-beveiligingsproblemen hebben en de huidige primaire versie hebben.
Controleer uw
package.json
enpackage-lock.json
bestanden.Gefeliciteerd. U hebt de afhankelijkheden bijgewerkt en de beveiligingsproblemen in het project opgelost.
Ontwikkelcontainer opschonen
Nadat u het project hebt voltooid, kunt u uw ontwikkelomgeving opschonen of teruggaan naar de typische status.
Als u de GitHub Codespaces-omgeving verwijdert, zorgt u ervoor dat u de hoeveelheid gratis rechten per kernuren kunt maximaliseren die u voor uw account krijgt.
Belangrijk
Zie GitHub Codespaces maandelijks inbegrepen opslag- en kernuren voor meer informatie over de rechten van uw GitHub-account.
Meld u aan bij het GitHub Codespaces-dashboard (https://github.com/codespaces).
Open het contextmenu voor de coderuimte en selecteer Verwijderen.