0 Tage Serie
javascript / expert
Snippet

Prototyp-lose Dictionaries für die Sicherheit

Objekte, die mit 'Object.create(null)' erstellt wurden, haben keinen Prototyp. Dies härtet Anwendungen gegen Prototype-Pollution-Angriffe ab, da geerbte Eigenschaften nicht überschattet oder korrumpiert werden können. Es verbessert auch die Leistung bei großen Lookups, da die Engine die Prototypenkette nicht durchsucht.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
const config = Object.create(null);
function setConfig(key, value) {
config[key] = value;
}
// Prevents issues with keys like '__proto__'
setConfig('__proto__', { admin: true });
console.log(config.admin); // undefined
console.log(Object.getPrototypeOf(config)); // null
nodejs
Erklärung
1
const config = Object.create(null);
Erstellt ein reines Dictionary-Objekt ohne integrierte Methoden oder Prototyp.
2
config[key] = value;
Sichere Eigenschaftszuweisung, selbst wenn 'key' ein reservierter Eigenschaftsname wie 'constructor' ist.