JavaScript · Senior · Pytanie 33 z 75
Co jest niebezpiecznego w funkcji deep merge zastosowanej do JSON od użytkownika?
merge({}, JSON.parse('{"__proto__": {"isAdmin": true}}'));- ✓Poprawna odpowiedź: Prototype pollution: właściwość trafia do
Object.prototype - 2Przepełnia stos przy dowolnych zagnieżdżonych danych JSON
- 3Nic:
JSON.parseautomatycznie usuwa niebezpieczne klucze wewnętrzne
Wyjaśnienie
Naiwny merge wykona target.__proto__.isAdmin = true, a ({}).isAdmin stanie się true w całej aplikacji. Ochrona: pomijać __proto__, constructor, prototype, używać Object.create(null) lub Map jako słowników, walidować wejście schematem.