Elke dag groeit het aantal Javascript pakketten. Het is het resultaat van de activiteit van een gemeenschap, die aan de ene kant vraagt om nieuwe oplossingen, aan de andere kant - ze genereert als een vorm van zelfontwikkeling of realisatie. Zo'n grote groei opent nieuwe deuren en mogelijkheden, maar brengt ook gevaren met zich mee, waar iedere ontwikkelaar zich bewust van moet zijn.
Eind november 2018 rapporteerde de GitHub-gemeenschap over een ernstige kwetsbaarheid in gebeurtenisstroom - pakket dat helpt bij het werken met knooppunt evenementen efficiënter. Het was behoorlijk populair, omdat het aantal downloads in die periode opliep tot meer dan 2,2 miljoen per week (in vergelijking met React met 3,7 miljoen). Event-stream en de afhankelijkheden ervan waren afhankelijk van een andere bibliotheek. plattegrond-stoom, dat toevallig was bijgewerkt met een crypto-pocket malware. Hiermee konden privésleutels en andere gegevens van gebruikersaccounts worden gestolen op machines waarop het pakket was gebundeld.
Uiteindelijk werd flatmap-stream verwijderd van NPM, wat tijdelijke problemen veroorzaakte met veel andere bibliotheken. In mei van hetzelfde jaar vond de gemeenschap een achterdeur in het getcookie pakket, dat ook deel uitmaakte van veel andere afhankelijkheden. Zulke voorbeelden kunnen vermenigvuldigd worden, wat aantoont dat het belangrijk is om aandacht te besteden aan afhankelijkheden die geïnstalleerd zijn in een projectniet alleen van de Javascript perspectief, maar ook in een algemene context.
Vertrouw op officiële oplossingen en grote gemeenschappen
Het is belangrijk om zoveel mogelijk te vertrouwen op officiële oplossingen in je project. Ze zijn niet alleen minder kwetsbaar vanwege een beter ontwikkelingsproces. Een grote gemeenschap, die meestal gepaard gaat met een beter merk, helpt problemen veel sneller te identificeren en, wat belangrijker is - goede oplossingen te vinden.
NPM-trends gebruiken
Fig. 1 Webpack NPM trend.
Fig. 2. Gebeurtenisstroom NPM-trend.
Soms geeft de kennis van de huidige staat van een pakket niet altijd het verleden weer. Een snelle blik op de npm trendgrafiek kan je een actueel pakket laten zien. Het laat niet alleen grote pieken zien, waar een kwetsbaarheid gevonden zou kunnen worden, maar ook de algemene toestand van een bepaald pakket (OPMERKING: grote pieken op google trends in de buurt van 24 - 30 december vertegenwoordigt vakantieseizoen, wat niet noodzakelijkerwijs een probleem vertegenwoordigt). Bekijk als voorbeeld figuur 1 - een representatieve trend van Webpack-downloads per week. U zult een stabiele groei zien zonder breekpunten, wat erop kan wijzen dat Webpack een stabiel en veilig pakket is om te gebruiken. Aan de andere kant vindt u in figuur 2 een grote daling in november, wat een duidelijk signaal is dat er in die periode iets verkeerd zou kunnen zijn gegaan (waarvan we al weten dat het waar is).
Controle op afhankelijkheid
De beste en meest betrouwbare manier om de status van je afhankelijkheden te controleren is door een controle. Dit commando is nu beschikbaar voor zowel yarn als npm, hoewel het de laatste versies vereist. Het stuurt een lijst met huidige afhankelijkheden naar een geschikt eindpunt en retourneert informatie met hun huidige kwetsbaarheden en andere details over het gebruik, inclusief verwijzingen naar documentatie. (figuur3).
Fig. 3. Voorbeeld van het resultaat van het npm audit commando. Bron: https://docs.npmjs.com
Het beheren van afhankelijkheden in Javascript is geen eenvoudige taak. Het aantal oplossingen groeit elke dag, dus vergeet niet om je afhankelijkheden verstandig en zorgvuldig te kiezen. Blijf je huidige project controleren en werk je pakketten regelmatig bij.
Om meer te leren over javascript afhankelijkheden en hoe je sommige problemen kunt oplossen, bekijk dan dit artikel.
Bron:
- https://github.com/dominictarr/event-stream/issues/116
- https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident
- https://blog.npmjs.org/post/173526807575/reported-malicious-module-getcookies
- https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities
- https://docs.npmjs.com/cli/audit
- https://yarnpkg.com/lang/en/docs/cli/audit/