Zum Hauptinhalt springen




Los paquetes de Open Source, y específicamente npm, Sie sind zweifellos beeindruckend. Sie machen Entwickler äußerst produktiv, indem sie jedem von uns eine Fülle vorhandener Funktionen bieten, die darauf warten, genutzt zu werden. Wenn wir all diese Funktionen selbst schreiben würden, würde es uns schwer fallen, einen Bruchteil dessen zu schaffen, was wir heute tun.

Infolgedessen verbraucht eine typische Node.js-Anwendung heute eine Menge MNP-Pakete, oft Hunderte oder Tausende davon. Was wir jedoch oft übersehen, ist, dass jedes dieser Pakete zusammen mit seiner Funktionalität auch die Sicherheitsrisiken von Node.js berücksichtigt. Viele Pakete öffnen neue Ports und erhöhen so die Angriffsfläche. Ungefähr 76% von Node Stores verwenden anfällige Pakete, von denen einige extrem hart sind. Open-Source-Projekte sind regelmäßig veraltet und vernachlässigen es, Sicherheitslücken zu schließen.

Zwangsläufig ist die Verwendung von npm-Pakete Sie sind Sicherheitsrisiken ausgesetzt. Glücklicherweise können Sie mehrere Fragen stellen, die Ihr Risiko erheblich reduzieren können. Dieser Beitrag beschreibt diese Fragen und wie man sie beantwortet.

Welche Pakete verwende ich?

Je mehr Pakete Sie verwenden, desto größer ist das Risiko, dass sich ein anfälliges oder bösartiges Paket unter ihnen befindet. Dies gilt nicht nur für die Pakete, die Sie direkt verwenden, sondern auch für die indirekten Abhängigkeiten, die sie verwenden.

Das Erkennen Ihrer Abhängigkeiten ist so einfach wie das Ausführen npm ls im Hauptordner Ihrer App, in dem die von Ihnen verwendeten Pakete aufgelistet sind. Sie können das Argument verwenden –Prod um nur Produktionsabhängigkeiten anzuzeigen (die Ihre Sicherheit am meisten beeinträchtigen) und hinzuzufügen -Lange für eine kurze Beschreibung jedes Pakets. Schauen Sie sich diesen Beitrag an, um besser zu verstehen, wie Sie Ihre Abhängigkeiten teilen und reduzieren können npm.

~ / proj / node_redis $ npm ls --prod --long [email protected] Users / Users / guypod / localproj / playground / node_redis │ Redis-Clientbibliothek │ git: //github.com/NodeRedis/node_redis.git │ https://github.com/NodeRedis/node_redis ├── [email protected] │ Extrem schnelle Implementierung von Warteschlangen mit zwei Enden │ git: //github.com/petkaantonov/deque.git │ https : //github.com/petkaantonov/deque ├── [email protected] │ Redis-Befehle │ git + https: //github.com/NodeRedis/redis-commands.git │ https://github.com/ NodeRedis / redis-commonds └── [email protected] Parser git + https: //github.com/NodeRedis/node-redis-parser.git https://github.com/NodeRedis / node-redis-parser#readme

Eine neue Gruppe von Service Unit Management, wie z bitHound y VersionEye Sie können auch die von Ihnen verwendeten Abhängigkeiten auflisten und einige der folgenden Informationen verfolgen.

Nachdem Sie nun wissen, was Sie haben, können Sie einige Fragen stellen, um das mit jedem Paket verbundene Risiko zu bewerten. Hier finden Sie einige Beispielfragen, warum Sie sie stellen sollten, und Vorschläge, wie Sie Antworten erhalten können.

Benutze ich dieses Paket noch?

Wenn die Zeit vergeht und sich Ihr Code ändert, werden Sie wahrscheinlich bestimmte Pakete nicht mehr verwenden und stattdessen neue hinzufügen. Entwickler entfernen jedoch häufig kein Paket aus dem Projekt, wenn sie es nicht mehr verwenden, da es möglicherweise von einem anderen Teil des Codes benötigt wird.

Infolgedessen neigen Projekte dazu, nicht verwendete Abhängigkeiten zu akkumulieren. Diese Abhängigkeiten sind zwar kein direktes Sicherheitsrisiko, erhöhen jedoch unnötig die Angriffsfläche und sorgen für mehr Unordnung im Code. Beispielsweise kann ein Angreifer ein Paket dazu verleiten, ein nicht verwendetes Paket mit einer schwerwiegenderen Sicherheitsanfälligkeit zu laden, wodurch der potenzielle Schaden erhöht wird.

Das Überprüfen auf nicht verwendete Abhängigkeiten erfolgt am einfachsten mit dem Tool depcheck. depcheck Scannen Sie Ihre Code-Comados erfordert y importieren, korreliert diese mit den in Ihrem installierten oder erwähnten Paketen package.json, und liefert einen Bericht. Der Befehl kann mithilfe von Eingabeaufforderungen auf verschiedene Arten geändert werden, sodass automatisch nach nicht verwendeten Buckets gesucht werden kann.

~ / proj / Hardy $ depcheck Nicht verwendete Abhängigkeiten * Gurke * Selen-Standalone Nicht verwendete devDependencies * Jasmin-Knoten

Verwenden andere Entwickler dieses Paket?

Die von vielen verwendeten Pakete werden auch genauer beobachtet. Die Wahrscheinlichkeit, dass jemand bereits ein Sicherheitsproblem in ihm gefunden und behoben hat, ist höher als in einem weniger verwendeten Paket.

Zum Beispiel das Paket sicher vergleichen Es wurde erstellt, um den String-Abgleich zu unterstützen, der nicht für einen Zeitangriff anfällig war. Ein grundlegender Fehler in der Verpackung führte jedoch dazu, dass genau das Gegenteil erreicht wurde, was bestimmte äußerst zeitkritische (und falsche) Vergleiche ermöglichte.

Wenn Sie genauer hinschauen, werden Sie feststellen, dass dieses Paket nur selten verwendet wird und nur 20 Mal am Tag heruntergeladen wird. Wenn dies ein beliebteres Paket wäre, hätte wahrscheinlich jemand den Funktionsfehler zuvor gefunden und gemeldet.

Der einfachste Weg, die Verwendung des Pakets zu bewerten, ist die im Abschnitt angegebene Download-Rate "Statistiken" von der Seite von npm-Paket. Puedes extraer esas estadísticas automáticamente usando la API von npm Statistiken, oder durchsuchen Sie historische Statistiken in npm-stat.com . Alternativ können Sie die Anzahl der Pakete anzeigen "Abhängige" - andere heute verwendete Pakete.

Benutze ich die neueste Version dieses Pakets?

Fehler, einschließlich Sicherheitsfehler, werden ständig gefunden und hoffentlich behoben. Außerdem werden neu gemeldete Sicherheitslücken häufig nur im letzten Hauptzweig eines Projekts behoben.

Zum Beispiel Anfang 2016 eine Sicherheitslücke von Denial-of-Service für reguläre Expression (ReDoS) im Paket HMAChawk.ReDoS ist eine Sicherheitsanfälligkeit, bei der eine lange oder sorgfältig ausgearbeitete Eingabe dazu führt, dass die Berechnung des Regex-Vergleichs lange dauert. In der Zwischenzeit bedient der Verarbeitungsunterprozess keine neuen Anforderungen, sodass ein Denial-of-Service-Angriff mit nur einer geringen Anzahl von Anforderungen möglich ist.

Verletzlichkeit hawkse schnell behoben in seiner neuesten Version der Hauptversion, 4.x, aber ließ die älteren Versionen ohne eine Lösung. Insbesondere hinterließ es eine unkorrigierte Sicherheitslücke in der Paket anfordern weit verbreitet, wer verwendet [email protected]. Später akzeptierte der Autor den Antrag auf Extraktion von Snyk mit einer Lösung für die Branche 3.x., aber die Benutzer anfordern Sie wurden für eine Weile ausgesetzt und das Problem besteht immer noch in den älteren Hauptversionszweigen. Dies ist nur ein Beispiel, aber in der Regel ist es weniger wahrscheinlich, dass Ihre Abhängigkeiten Sicherheitslücken aufweisen, wenn sie auf der neuesten Version sind.

Mit dem Befehl können Sie herausfinden, ob Sie die neueste Version verwenden oder nicht npm veraltet. Dieser Befehl unterstützt auch das Flag –Prod Dev-Abhängigkeiten zu ignorieren sowie –Json um die Automatisierung zu vereinfachen. Sie können auch verwenden Greenkeeper um Sie proaktiv zu informieren, wenn Sie nicht die neueste Version verwenden.

~ / proj / handlebars.js $ npm veraltet --prod Paket Aktuell gesucht Letzter Standort asynchron 1.5.2 1.5.2 2.0.1 Lenker Quell-Map 0.4.4 0.4.4 0.5.6 Lenker uglify-js 2.6.2 2.7. 3 2.7.3 Lenkergarne 3.32.0 3.32.0 5.0.0 Lenker

Wann wurde dieses Paket zuletzt aktualisiert?

Erstellen Sie ein Open Source-Projekt, einschließlich Pakete npm, es divertido. Muchos desarrolladores talentosos crean estos proyectos en su tiempo libre, invirtiendo mucho tiempo y energía en hacerlos buenos. Sin embargo, con el tiempo, la emoción a menudo se desvanece y los cambios en la vida pueden hacer que Sein difícil encontrar el tiempo necesario.

Als Ergebnis die Pakete npm Sie werden oft abgestanden, fügen keine Funktionen hinzu und beheben Fehler langsam, wenn überhaupt. Dies ist nicht wirklich gut für die Funktionalität, aber es ist besonders problematisch für die Sicherheit. Funktionsfehler stören Sie normalerweise nur, wenn Sie etwas Neues erstellen, sodass Sie einen gewissen Spielraum dafür haben, wie schnell sie behoben werden. Das Beheben von Sicherheitslücken ist dringender - sobald sie bekannt sind, können Angreifer sie ausnutzen. Daher ist die Zeit für die Behebung von Sicherheitslücken von entscheidender Bedeutung.