javascript / expert
Snippet
Tamper-Proof Object Encapsulation via Non-Enumerable Symbols
Combining Symbol property keys with Object.defineProperty descriptors and Object.preventExtensions prevents external property enumeration, overwriting, and dynamic extension, producing tamper-resistant data structures.
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
Breakdown
1
const SecretKey = Symbol('secretKey');
Creates a unique, unguessable primitive property key identifier.
2
Object.defineProperty(this, SecretKey, { ... });
Configures non-enumerable, read-only internal field descriptor constraints.
3
Object.preventExtensions(this);
Locks object shape to prevent prototype pollution or arbitrary key insertion.