Hver eneste dag vokser mengden av Javascript-pakker. Det er resultatet av et samfunns aktivitet, som på den ene siden krever nye løsninger, på den andre siden - genererer dem som en form for egenutvikling eller realisering. En slik stor vekst åpner nye dører og muligheter, men medfører også farer som alle utviklere må være oppmerksomme på.
I slutten av november 2018 rapporterte GitHub-fellesskapet om en alvorlig sårbarhet i hendelsesstrøm - pakke som hjelper deg med å jobbe med node arrangementer mer effektivt. Det var ganske populært, ettersom antall nedlastinger i den spesifikke perioden nådde over 2,2 millioner per uke (sammenlignet med React med 3,7 millioner). Event-stream, samt dets avhengigheter, var avhengig av et annet bibliotek - flatmap-steam, som tilfeldigvis hadde blitt oppdatert med en kryptolomme-skadevare. Den gjorde det mulig å stjele private nøkler og annen informasjon fra brukernes kontoer på maskiner der pakken var lagt inn.
Etter hvert ble flatmap-stream fjernet fra NPM, noe som skapte tidsmessige problemer med mange andre biblioteker. I mai samme år fant fellesskapet en bakdør i getcookie pakke, som også var en del av mange andre avhengigheter. Slike eksempler kan mangedobles, noe som viser at det er viktig å ta hensyn til avhengigheter som er installert i en prosjektikke bare fra Javascript perspektiv, men også i en generell sammenheng.
Stol på offisielle løsninger og store fellesskap
Så langt det er mulig, er det viktig å stole på offisielle løsninger i prosjektet ditt. De er ikke bare mindre sårbare på grunn av en bedre utviklingsprosess. Et stort fellesskap, som vanligvis kommer med et bedre varemerke, bidrar til å identifisere problemer mye raskere og - enda viktigere - finne gode løsninger.
Bruk NPM-trender
Fig. 1 Webpack NPM-trend.
Fig. 2. Event-stream NPM-trend.
Noen ganger kan det hende at kunnskap om en pakkes nåværende tilstand ikke representerer dens fortid. En rask titt på npm trends-diagrammet kan vise deg en faktisk pakketrend. Det vil ikke bare vise store topper, der det kan finnes en sårbarhet, men den generelle tilstanden til en gitt pakke (MERK: store topper på google-trender i nærheten av 24. - 30. desember representerer høytiden, noe som ikke nødvendigvis representerer et problem). Som et eksempel, ta en titt på figur 1 - en representativ trend for nedlasting av Webpack per uke. Du vil se en stabil vekst uten noen bruddpunkter, noe som kan tyde på at Webpack er en stabil og sikker pakke å bruke. På den annen side vil du i figur 2 finne et stort fall i november, noe som er et klart signal om at noe galt kan ha skjedd i den perioden (som vi allerede vet er sant).
Revisjon av avhengighetsforhold
Den beste og mest pålitelige måten å verifisere tilstanden til avhengighetene dine på, er å utføre en revisjon. Denne kommandoen er nå tilgjengelig både for yarn og npm, selv om den krever de nyeste versjonene. Den sender en liste over aktuelle avhengigheter til et riktig endepunkt og returnerer informasjon om aktuelle sårbarheter og andre detaljer om bruk, inkludert henvisning til dokumentasjon. (figur 3).
Fig. 3. Eksempel på resultatet av npm audit-kommandoen. Kilde: https://docs.npmjs.com
Det er ikke enkelt å håndtere avhengigheter i Javascript. Det finnes stadig flere løsninger, så husk å velge avhengigheter med omhu. Fortsett å revidere ditt nåværende prosjekt og oppdater pakkene dine regelmessig.
For å lære mer om javascript-avhengigheter og hvordan du kan løse noen av problemene med dem, vennligst sjekk denne artikkelen.
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/