javascript / expert
Snippet
Defensive Objekt-Rekursion gegen Prototype-Pollution bei der React-Zustandshydrierung
Beim Hydrieren von Client-Zuständen in React aus unüberprüften externen JSON-Daten können Angreifer Prototype-Pollution über '__proto__' oder 'constructor' ausnutzen. Durch die rekursive Erstellung von Objekten mit Null-Prototyp via Object.create(null) und das Entfernen gefährlicher Schlüssel stellt diese Routine sicher, dass Eingabeobjekte Object.prototype vor der Zustandsverarbeitung nicht korrumpieren.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
function sanitizeHydratedState(target) {if (target === null || typeof target !== 'object') return target;const safeObj = Object.create(null);for (const key of Object.keys(target)) {if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue;const value = target[key];safeObj[key] = typeof value === 'object' && value !== null ? sanitizeHydratedState(value) : value;}return Object.freeze(safeObj);}
react
Erklärung
1
const safeObj = Object.create(null);
Erstellt ein Objekt ohne Prototyp-Vererbungskette, um die Vererbung von Eigenschaften zu verhindern.
2
if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue;
Filtert Prototyp-Manipulationsschlüssel heraus, die globale Object-Eigenschaften kontaminieren könnten.
3
return Object.freeze(safeObj);
Friert den bereinigten Objektbaum ein, um Unveränderlichkeit über React-Renderzyklen hinweg zu garantieren.