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); // undefinedconsole.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.