typescript / intermediate
Snippet
Härtung von Objekt-Wörterbüchern gegen Prototype-Pollution-Angriffe
Objekte, die mit Object.create(null) erstellt wurden, besitzen keine Prototyp-Vererbungseigenschaften wie __proto__ oder toString. Das Einfrieren bietet ein unveränderliches Wörterbuch, das gegen Prototype-Pollution-Schwachstellen geschützt ist.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
type SafeDictionary<T> = Record<string, T>;function createSafeLookup<T>(): SafeDictionary<T> {return Object.freeze(Object.create(null));}const lookup = Object.assign(Object.create(null), {allowedKey: 'value'}) as Record<string, string>;const keyToTest = '__proto__';console.log(keyToTest in lookup);
Erklärung
1
function createSafeLookup<T>(): SafeDictionary<T> {
Defines a generic factory for producing prototype-less dictionary structures.
2
return Object.freeze(Object.create(null));
Erstellt ein Objekt ohne Prototyp-Fallback-Kette und friert es gegen strukturelle Änderungen ein.
3
console.log(keyToTest in lookup);
Ergibt false, da Prototyp-Eigenschaften auf Null-Prototyp-Objekten nicht existieren.