Iga päev kasvab Javascript-pakettide hulk. See on kogukonna tegevuse tulemus, mis ühelt poolt nõuab uusi lahendusi, teiselt poolt - genereerib neid enesearengu või realiseerimise vormis. Selline suur kasv avab uusi uksi ja võimalusi, kuid toob kaasa ka ohu, mida iga arendaja peab teadvustama.
2018. aasta novembri lõpus teatas GitHubi kogukond tõsisest haavatavusest dokumendis event-stream - pakett, mis aitab töötada sõlme sündmused tõhusamalt. See oli üsna populaarne, kuna allalaadimiste arv ulatus sel konkreetsel perioodil üle 2,2 miljoni nädalas (võrreldes React 3,7 miljoniga). Event-stream, samuti selle sõltuvused, sõltusid teisest raamatukogust - flatmap-steam, mis juhtus olema uuendatud krüptotaskuse pahavara abil. See võimaldas varastada privaatseid võtmeid ja muid andmeid kasutajate kontodest masinatel, kuhu pakett oli komplekteeritud.
Lõpuks eemaldati flatmap-stream NPMist, mis tekitas ajalisi probleeme paljude teiste raamatukogudega. Sama aasta mais leidis kogukond tagaukse sees oleva getcookie pakett, mis oli osa ka paljudest teistest sõltuvustest. Selliseid näiteid võib korrutada, mis näitab, et oluline on pöörata tähelepanu sõltuvustele, mis on paigaldatud ühte projekt, mitte ainult alates Javascript perspektiivi, vaid ka üldises kontekstis.
Tugineda ametlikele lahendustele ja suurtele kogukondadele
Võimaluse korral on oluline, et teie projektis kasutataks võimalikult palju ametlikke lahendusi. Need ei ole lihtsalt vähem haavatavad parema arendusprotsessi tõttu. Suur kogukond, mis tavaliselt kaasneb parema kaubamärgiga, aitab probleeme palju kiiremini tuvastada ja - mis veelgi olulisem - leida häid lahendusi.
Kasutage NPM suundumusi

Joonis 1 Webpacki NPM-i suundumus.

Joonis 2. Sündmuste voo NPM suundumus.
Mõnikord ei pruugi teadmised paketi praegusest seisust esindada nende minevikku. Kiire pilk npm trendid diagrammi võib näidata teile tegelikku paketi trendi. See näitab mitte ainult suuri piike, kus võiks olla mõni haavatavus, vaid ka antud paketi üldist seisundit (MÄRKUS: suured piigid google trends'is 24. - 30. detsembri läheduses tähistavad pühade hooaega, mis ei pruugi tingimata probleemi esindada). Näitena vaadake joonist 1, mis kujutab Webpacki allalaadimise trendi nädalas. Näete stabiilset kasvu ilma murdepunktideta, mis võib viidata sellele, et Webpack on stabiilne ja turvaline pakett, mida kasutada. Teisalt, joonisel 2 näete suurt langust novembris, mis on selge signaal, et sel perioodil võis juhtuda midagi valesti (mida me juba teame, et see on tõsi).
Sõltuvuse audit
Parim ja kõige usaldusväärsem viis oma sõltuvuste seisundi kontrollimiseks on teostada audit. See käsk on nüüd saadaval nii yarni kui ka npm-i jaoks, kuigi selleks on vaja nende viimaseid versioone. See saadab nimekirja praegustest sõltuvustest korralikku lõpp-punkti ja tagastab teabe, mis sisaldab nende praeguseid haavatavusi ja muid kasutuse üksikasju, sealhulgas viiteid dokumentatsioonile. (joonis3).

Joonis 3. Näide npm auditi käsu tulemusest. Allikas: https://docs.npmjs.com
Sõltuvuste haldamine Javascriptis ei ole lihtne ülesanne. Lahenduste arv kasvab iga päevaga, seega ärge unustage, et valige oma sõltuvused targalt ja hoolikalt. Kontrollige pidevalt oma jooksvat projekti ja uuendage oma pakette regulaarselt.
Lisateave javascripti sõltuvuste kohta ja kuidas lahendada mõningaid nende probleeme, palun vaadake seda artiklit.
Allikas:
- 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/