Wenn Sie direkt von einem Aikido Autofix Pull Request auf diese Seite gekommen sind und nur lernen wollen, wie man den PR fertigstellt, springen Sie zu Wie man implementiert'..
Das JavaScript-Ökosystem hat ein Problem, und das heißt Prototypenverschmutzung. Für ein SaaS-Unternehmen, das mit JavaScript/npm baut, werden in der Regel bis zu 20-30 % aller bekannten Schwachstellen (CVE), die in den Abhängigkeiten entdeckt werden, durch Prototype Pollution verursacht. Sie sind in der Regel nicht leicht auszunutzen, aber in schlimmen Fällen können sie zu Fehlern bei der Remotecodeausführung führen. Das bedeutet, dass man sie nur schwer ganz ignorieren kann.
Zwei Möglichkeiten, die Verschmutzung durch Prototypen zu verhindern
Es gibt eine experimentelle Unterstützung in Node.js, um den Prototyp standardmäßig unter einem Flag namens --frozen-intrinsics einzufrieren. Die Aktivierung dieses Flags vereitelt alle Angriffe auf die Verschmutzung von Prototypen. Wir können es jedoch noch nicht empfehlen, da es experimentell ist und auch nicht auf Frontend-Codebases funktioniert. Das würde Sie daran hindern, den gleichen Schutz für Ihr Frontend und Backend zu entwickeln.
Eine Alternative ist nopp (No Prototype Pollution), eine 14-zeilige Bibliothek, die den Prototyp (und einige andere Einstiegspunkte) einfriert.
Wie man sie umsetzt
1. Importieren der Bibliothek
Nachdem Sie nopp installiert haben, müssen Sie nur noch das Skript aufrufen, das Ihre Anwendung startet. Dort fordern Sie die Bibliothek einfach an, nachdem Sie alle anderen Bibliotheken angefordert haben. Beispiel-Commit unten:

2. App-weite Sicherheitsprüfung für Bibliotheken in Abhängigkeit von Prototypenmanipulation
Der Grund, warum wir den Prototyp nach dem Einbinden anderer Bibliotheken einfrieren, ist, dass einige Ihrer anderen Bibliotheken sich auf die Änderung des Prototyps verlassen können, um zu funktionieren! Auch nach dem Einfrieren des Prototyps NACH dem Einbinden anderer Bibliotheken ist es immer noch möglich, dass Sie ein Refactoring benötigen, bevor Ihre App wieder funktioniert!
Ein Beispiel: Amazons eigenes aws-sdk für Node.js nimmt während der Erstellung von Objekten wie "new AWS.S3(..)" Änderungen am Prototyp vor. In solchen Fällen müssen Sie möglicherweise einen Refactor wie unten gezeigt durchführen, um sicherzustellen, dass das Objekt erstellt wird, wenn Ihr Node.js-Prozess gebootet wird und nicht in einer späteren Phase.

Die Sicherstellung, dass Ihre Anwendung auch nach dieser Änderung noch funktioniert, kann bei größeren Repositories mit geringer Testabdeckung eine größere Zeitinvestition bedeuten. Bei kleineren Repositories lohnt es sich, wenn man sich nie wieder mit der Verschmutzung von Prototypen beschäftigen muss. Bei größeren Repositories könnte dies komplexer sein, aber die Investition in die Technik wird sich auf lange Sicht wahrscheinlich immer noch positiv auszahlen.