javascript / expert
Snippet
Gehärtetes DTO-Parsing über Null-Prototypen und Schutz vor Prototype Pollution
In Node.js-Anwendungen, die nicht vertrauenswürdige dynamische Eingaben verarbeiten, können Standardzuweisungen von Eigenschaften die Anwendung für Prototype Pollution-Angriffe öffnen. Die Verwendung von Object.create(null) erstellt ein Zielobjekt ohne Prototyp, was Manipulationen der Vererbungskette verhindert. In Kombination mit Reflect.ownKeys zum Erfassen von Symbol-Eigenschaften und gezieltem Filtern entsteht ein unveränderliches, gehärtetes DTO.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
function safeObjectAssign(target, source) {const safeTarget = target ?? Object.create(null);for (const key of Reflect.ownKeys(source)) {if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue;const desc = Object.getOwnPropertyDescriptor(source, key);if (desc) Object.defineProperty(safeTarget, key, desc);}return Object.freeze(safeTarget);}
nodejs
Erklärung
1
const safeTarget = target ?? Object.create(null);
Stellt sicher, dass das Zielobjekt einen Null-Prototypen besitzt, um es von Object.prototype zu isolieren.
2
if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue;
Schützt vor Prototype Pollution-Vektoren, indem gefährliche Eigenschaftsschlüssel ignoriert werden.
3
return Object.freeze(safeTarget);
Verhindert nachträgliche Eigenschaftsergänzungen, Löschungen oder Mutationen am Zielobjekt.