Hver eneste dag vokser mængden af Javascript-pakker. Det er resultatet af et samfunds aktivitet, som på den ene side kræver nye løsninger og på den anden side genererer dem som en form for selvudvikling eller realisering. En så stor vækst åbner nye døre og muligheder, men medfører også farer, som alle udviklere skal være opmærksomme på.
I slutningen af november 2018 rapporterede GitHub-fællesskabet om en alvorlig sårbarhed i begivenhedsstrøm - pakke, der hjælper med at arbejde med Knudepunkt begivenheder mere effektivt. Det var ret populært, da antallet af downloads i den specifikke periode nåede op på over 2,2 mio. om ugen (sammenlignet med React med 3,7 mio.). Event-stream og dets afhængigheder var afhængige af et andet bibliotek - fladkort-damp, der tilfældigvis var blevet opdateret med en crypto-pocket-malware. Den gjorde det muligt at stjæle private nøgler og andre oplysninger fra brugernes konti på maskiner, hvor pakken var samlet.
Til sidst blev flatmap-stream fjernet fra NPM, hvilket skabte tidsmæssige problemer med mange andre biblioteker. I maj samme år fandt fællesskabet en bagdør i getcookien pakke, som også var en del af mange andre afhængigheder. Sådanne eksempler kan multipliceres, hvilket viser, at det er vigtigt at være opmærksom på afhængigheder, der er installeret i en projektikke kun fra Javascript perspektiv, men også i en generel sammenhæng.
Stol på officielle løsninger og store fællesskaber
Det er vigtigt, at du så vidt muligt bruger officielle løsninger i dit projekt. De er ikke bare mindre sårbare på grund af en bedre udviklingsproces. Et stort fællesskab, som normalt kommer med et bedre brand, hjælper med at identificere problemer meget hurtigere og - hvad der er endnu vigtigere - finde gode løsninger.
Brug NPM-tendenser
Fig. 1 Webpack NPM-trend.
Fig. 2. Event-stream NPM-trend.
Nogle gange repræsenterer viden om en pakkes aktuelle tilstand måske ikke dens fortid. Et hurtigt kig på npm-trendsdiagrammet kan vise dig en faktisk pakkeudvikling. Det viser ikke kun store toppe, hvor der kan findes en sårbarhed, men den generelle tilstand for en given pakke (BEMÆRK: store toppe på google trends nær 24. - 30. december repræsenterer feriesæsonen, som ikke nødvendigvis repræsenterer et problem). Som et eksempel kan du se på figur 1 - en repræsentativ tendens for Webpack-download pr. uge. Du vil se en stabil vækst uden brudpunkter, hvilket kan tyde på, at Webpack er en stabil og sikker pakke at bruge. På den anden side finder du i figur 2 et stort fald i november, hvilket er et klart signal om, at der kan være sket noget forkert i den periode (hvilket vi allerede ved er sandt).
Revision af afhængighed
Den bedste og mest pålidelige måde at kontrollere dine afhængigheders tilstand på er at udføre en revision. Denne kommando er nu tilgængelig for både yarn og npm, selvom den kræver deres nyeste versioner. Den sender en liste over aktuelle afhængigheder til et korrekt endpoint og returnerer oplysninger, der indeholder deres aktuelle sårbarheder og andre detaljer om brug, herunder henvisning til dokumentation. (figur 3).
Fig. 3. Eksempel på resultat af npm audit-kommando. Kilde: https://docs.npmjs.com
Håndtering af afhængigheder i Javascript er ikke nogen nem opgave. Antallet af løsninger vokser hver dag, så husk at vælge dine afhængigheder med omhu og omtanke. Bliv ved med at gennemgå dit nuværende projekt, og opdater dine pakker regelmæssigt.
For at lære mere om javascript-afhængigheder, og hvordan man løser nogle af deres problemer, Tjek venligst denne artikel.
Kilde:
- 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/