Код Middle Безопасность бэкенда обновлено
deepMerge без prototype pollution
Условие
Напиши deepMerge(target, source): рекурсивно сливает простые объекты из source в target (мутирует и возвращает target). Массивы и примитивы перезаписываются целиком, вложенные простые объекты сливаются. Ключи __proto__, constructor и prototype игнорируются на любой глубине: source пришёл из JSON.parse(req.body) и может быть атакой. Учитываются только собственные ключи source.
Что проверяют тесты
вложенное слияние
массивы перезаписываются
__proto__ из JSON не загрязняет прототип
constructor.prototype тоже
вложенный __proto__
объект поверх примитива
null перезаписывает
Как подойти
Подсказки: 2
JSON.parseсоздаёт__proto__как обычный собственный ключ: его надо отфильтровать явно.- Не спускайся в
target[key], если это не собственное свойство.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Термины по теме
Ещё по теме «Безопасность бэкенда»
- Безопасный INSERT: параметры и белый список колонок
- CORS: проверка Origin по белому списку
- Кто превысил лимит запросов: скользящее окно
- Код-ревью: регистрация, вход и сброс пароля
- Как защитить Node.js API
- Mass assignment
- NoSQL-инъекция в MongoDB
- Как хранить пароли