Množství balíčků Javascript roste každým dnem. Je to výsledek aktivity komunity, která na jedné straně vyžaduje nová řešení, na druhé straně je generuje jako formu vlastního vývoje nebo realizace. Tak velký nárůst otevírá nové dveře a možnosti, ale přináší také nebezpečí, kterého si musí být každý vývojář vědom.
Koncem listopadu 2018 komunita GitHubu informovala o závažné zranitelnosti ve službě proud událostí - balíček, který pomáhá pracovat s uzel události efektivněji. Byl poměrně populární, protože počet stažení v tomto konkrétním období dosahoval více než 2,2 milionu za týden (ve srovnání s rokem 2010). React s 3,7 mlns). Event-stream, stejně jako jeho závislosti, byly závislé na jiné knihovně - flatmap-steam, který byl náhodou aktualizován malwarem typu crypto-pocket. Ten umožňoval krást soukromé klíče a další údaje z účtů uživatelů na počítačích, kde byl balíček přibalen.
Nakonec byl flatmap-stream z NPM odstraněn, což způsobilo časové problémy s mnoha dalšími knihovnami. V květnu téhož roku komunita našla zadní vrátka v rámci getcookie který byl součástí mnoha dalších závislostí. Takových příkladů může být více, což ukazuje, že je důležité věnovat pozornost závislostem instalovaným do projekt, a to nejen z Javascript ale také v obecném kontextu.
Spoléhat se na oficiální řešení a velké komunity
Je důležité, abyste se ve svém projektu pokud možno spoléhali na oficiální řešení. Nejenže jsou méně zranitelná kvůli lepšímu proces vývoje. Velká komunita, která obvykle přichází s lepší značkou, pomáhá mnohem rychleji identifikovat problémy, a co je důležitější - najít dobrá řešení.
Využití trendů NPM

Obr. 1 Trend Webpack NPM.

Obr. 2. Trend NPM v proudu událostí.
Někdy znalost současného stavu balíčku nemusí odpovídat jeho minulosti. Rychlý pohled na graf trendů npm vám může ukázat aktuální trend balíčku. Ukáže nejen velké špičky, kde by se mohla nacházet nějaká zranitelnost, ale i celkový stav daného balíčku (POZNÁMKA: velké špičky v trendech google poblíž 24. - 30. prosince představují sváteční období, které nemusí nutně představovat problém). Jako příklad se podívejte na obrázek 1 - představuje trend stahování balíku Webpack za týden. Uvidíte stabilní růst bez zlomových bodů, což může naznačovat, že Webpack je stabilní a bezpečný balík k použití. Na obrázku 2 naopak najdete velký pokles v listopadu, což je jasný signál, že se v tomto období mohlo stát něco špatného (což už víme, že je pravda).
Audit závislosti
Nejlepším a nejspolehlivějším způsobem, jak ověřit stav závislostí, je provést kontrolu. audit. Tento příkaz je nyní k dispozici nativně pro yarn i npm, i když vyžaduje jejich nejnovější verze. Do příslušného koncového bodu odešle seznam aktuálních závislostí a vrátí informace obsahující jejich aktuální zranitelnosti a další podrobnosti o použití, včetně odkazu na dokumentaci. (obrázek3).

Obr. 3. Příklad výsledku příkazu npm audit. Zdroj: https://docs.npmjs.com
Správa závislostí v jazyce Javascript není snadný úkol. Počet řešení roste každým dnem, proto nezapomeňte vybírat závislosti s rozvahou a pečlivě. Neustále kontrolujte svůj aktuální projekt a pravidelně aktualizujte své balíčky.
Další informace o závislostech javascriptu a o tom, jak vyřešit některé jejich problémy, podívejte se prosím na tento článek.
Zdroj:
- 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/