1. Prototype Pollution
Was ist Protoype Pollution¶
Ist eine JavaScript-Schwachstelle die es einem Angreifer ermöglicht Eigenschaften von einem globalen Objekt hinzufügen welche dann wiederum auch von Objekten geerbt werden. Meistens wird das mit anderen Schwachstellen verknüpft.
Was ist ein Objekt in Javascript¶
Eine Kollektion von Key:Value Paaren auch genannt "Properties"
Man kann auf die Paare entweder mit Punkt oder Klammer Notation aufrufen
Was sind Prototypes in JS¶
-
Definition: Ein Prototype ist ein Objekt, von dem ein anderes Objekt erbt. Jede Instanz hat einen internen Verweis (
[[Prototype]]) auf ihr Prototype-Objekt. -
Kette (Prototype Chain): Wenn du
obj.fooliest, sucht JS erst aufobj, dann auf dessen Prototype, dann weiter die Kette hoch - bisnull. z. B.
Prototype Chain¶
Alles in Javascript sind technisch gesehen Objekte die alle beliebig miteinader vererbt sind.

Zugriff auf Prototyp-Objekt mit __proto__¶
Man kann mit __proto__ von jedem Objekt auf seinen Prototyp zugreifen.
- Die Eigenschaft fungiert als Setter als auch als Getter
username.__proto__ // String.prototype
username.__proto__.__proto__ // Object.prototype
username.__proto__.__proto__.__proto__ // null
Prototypen ändern¶
Obwohl es schlechte Praxis ist, ist es möglich in JS den Prototypen zu ändern. Dabei lassen sich sogar neue Methoden hinzufügen.
z. B. Modernes JS bietet trim() für Strings, aber bevor es diese Methode gab, haben Entwickler teilweise ihre eigene gebaut und ergänzt - somit hatte jeder String ebenfalls Zugriff auf die Methode.
früher:
String.prototype.removeWhitespace = function(){
// führende und nachfolgende Leerzeichen entfernen
}
heute: