javascript / expert
Snippet
Härtung von Objekten gegen Prototype Pollution
Prototype Pollution tritt auf, wenn ein Angreifer Object.prototype modifizieren kann. Die Verwendung von Object.create(null) erstellt ein Objekt ohne Prototypenkette, wodurch es gegen vererbte Eigenschafts-Injektionen immun ist. Das Einfrieren des Objekts verhindert weitere Änderungen an seiner Struktur.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
const createSecureConfig = (data) => {const config = Object.assign(Object.create(null), data);Object.freeze(config);return config;};const userSupplied = JSON.parse('{"__proto__": {"admin": true}}');const secure = createSecureConfig(userSupplied);console.log(secure.admin); // undefinedconsole.log(secure.__proto__); // undefined
nodejs
Erklärung
1
Object.create(null)
Erstellt ein 'reines' Objekt ohne Prototyp, d. h. es erbt keine Methoden wie toString oder Eigenschaften von Object.prototype.
2
Object.freeze(config)
Macht das Objekt unveränderlich und verhindert das Hinzufügen, Löschen oder Ändern seiner Eigenschaften.