JavaScript · Senior · Запитання 33 з 75
Чим небезпечна функція глибокого злиття об'єктів із користувацького JSON?
merge({}, JSON.parse('{"__proto__": {"isAdmin": true}}'));- ✓Правильна відповідь: Prototype pollution: властивість потрапить в
Object.prototype - 2Вона спричинить переповнення стека на будь-яких вкладених JSON-даних
- 3Нічим:
JSON.parseавтоматично видаляє небезпечні службові ключі
Пояснення
Наївне злиття присвоїть target.__proto__.isAdmin = true, і ({}).isAdmin стане true в усьому застосунку. Захист: пропускати __proto__, constructor, prototype, використовувати Object.create(null) або Map для словників, валідувати вхід схемою.