javascript / expert
Snippet
Manipulationssichere Objekt-Kapselung über nicht-aufzählbare Symbole
Die Kombination von Symbol-Schlüsseln mit Object.defineProperty-Deskriptoren und Object.preventExtensions verhindert externe Eigenschaftsaufzählung, Überschreiben und dynamische Erweiterungen für manipulationssichere Datenstrukturen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const SecretKey = Symbol('secretKey');class SecureVault {constructor(secretValue) {Object.defineProperty(this, SecretKey, {value: secretValue,writable: false,enumerable: false,configurable: false});Object.preventExtensions(this);}verifySecret(candidate) {return Reflect.get(this, SecretKey) === candidate;}}const vault = new SecureVault('topSecret123');console.log(Object.keys(vault)); // []console.log(vault.verifySecret('topSecret123')); // true
nodejs
Erklärung
1
const SecretKey = Symbol('secretKey');
Erstellt einen eindeutigen, nicht erratbaren primitiven Eigenschaftsschlüssel.
2
Object.defineProperty(this, SecretKey, { ... });
Konfiguriert nicht-aufzählbare, schreibgeschützte interne Feld-Deskriptor-Beschränkungen.
3
Object.preventExtensions(this);
Sperrt die Objektform, um Prototype-Pollution oder beliebige Schlüssel-Einfügungen zu verhindern.