Jeden Tag wächst die Zahl der Javascript-Pakete. Sie ist das Ergebnis der Aktivität einer Gemeinschaft, die einerseits neue Lösungen fordert, andererseits diese als eine Form der Selbstentwicklung oder -verwirklichung erzeugt. Ein solch großes Wachstum öffnet neue Türen und Möglichkeiten, bringt aber auch Gefahren mit sich, derer sich jeder Entwickler bewusst sein muss.
Ende November 2018 berichtete die GitHub-Community über eine schwerwiegende Sicherheitslücke in Event-Stream - Paket, das die Arbeit mit Knoten Veranstaltungen effizienter zu gestalten. Es war ziemlich beliebt, da die Anzahl der Downloads in diesem Zeitraum über 2,2 Millionen pro Woche betrug (im Vergleich zu React mit 3,7 Millionen). Event-stream sowie seine Abhängigkeiten waren von einer anderen Bibliothek abhängig - flatmap-steam, die zufällig mit einer Crypto-Pocket-Malware aktualisiert worden war. Sie ermöglichte den Diebstahl privater Schlüssel und anderer Details aus den Konten der Nutzer auf den Rechnern, auf denen das Paket gebündelt war.
Schließlich wurde flatmap-stream aus NPM entfernt, was zu zeitlichen Problemen mit vielen anderen Bibliotheken führte. Im Mai desselben Jahres fand die Gemeinschaft eine Hintertür in das getcookie Paket, das auch Teil vieler anderer Abhängigkeiten war. Solche Beispiele können vervielfacht werden, was zeigt, dass es wichtig ist, auf die Abhängigkeiten zu achten, die in einer Projektnicht nur aus dem Javascript Perspektive, sondern auch in einem allgemeinen Kontext.
Verlassen Sie sich auf offizielle Lösungen und große Gemeinschaften
Es ist wichtig, dass Sie sich bei Ihrem Projekt so weit wie möglich auf offizielle Lösungen verlassen. Sie sind nicht nur wegen eines besseren Entwicklungsprozesses weniger anfällig. Eine große Gemeinschaft, die in der Regel mit einer besseren Marke einhergeht, hilft, Probleme viel schneller zu erkennen und - was noch wichtiger ist - gute Lösungen zu finden.
NPM-Trends nutzen
Abb. 1 Webpack NPM Trend.
Abb. 2. Ereignisgesteuerter NPM-Trend.
Manchmal repräsentiert das Wissen über den aktuellen Zustand eines Pakets nicht unbedingt seine Vergangenheit. Ein kurzer Blick auf das npm-Trends-Diagramm kann Ihnen einen aktuellen Paket-Trend zeigen. Es zeigt nicht nur große Spitzen, in denen eine Schwachstelle gefunden werden könnte, sondern auch den allgemeinen Zustand eines bestimmten Pakets (HINWEIS: große Spitzen bei Google Trends in der Nähe des 24. bis 30. Dezembers stehen für die Weihnachtszeit, was nicht unbedingt ein Problem darstellt). Schauen Sie sich zum Beispiel Abbildung 1 an, die den Trend der Webpack-Downloads pro Woche darstellt. Sie werden ein stabiles Wachstum ohne Einbrüche sehen, was darauf schließen lässt, dass Webpack ein stabiles und sicheres Paket ist, das man verwenden kann. Auf der anderen Seite finden Sie in Abbildung 2 einen starken Rückgang im November, was ein klares Signal dafür ist, dass in diesem Zeitraum etwas falsch gelaufen sein könnte (was, wie wir bereits wissen, wahr ist).
Prüfung von Abhängigkeiten
Der beste und zuverlässigste Weg, den Status Ihrer Abhängigkeiten zu überprüfen, ist die Durchführung einer Prüfung. Dieser Befehl ist jetzt nativ sowohl für yarn als auch für npm verfügbar, obwohl er deren neueste Versionen benötigt. Er sendet eine Liste aktueller Abhängigkeiten an einen geeigneten Endpunkt und gibt Informationen über deren aktuelle Sicherheitslücken und andere Details zur Verwendung zurück, einschließlich Verweisen auf die Dokumentation. (Abbildung3).
Abb. 3. Beispiel für das Ergebnis des Befehls npm audit. Quelle: https://docs.npmjs.com
Die Verwaltung von Abhängigkeiten in Javascript ist keine leichte Aufgabe. Die Zahl der Lösungen wächst täglich, deshalb sollten Sie Ihre Abhängigkeiten mit Bedacht und Sorgfalt auswählen. Überprüfen Sie Ihr aktuelles Projekt und aktualisieren Sie Ihre Pakete regelmäßig.
Erfahren Sie mehr über Javascript-Abhängigkeiten und wie Sie einige ihrer Probleme lösen können, lesen Sie bitte diesen Artikel.
Quelle:
- 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/