Код 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
  1. JSON.parse создаёт __proto__ как обычный собственный ключ: его надо отфильтровать явно.
  2. Не спускайся в target[key], если это не собственное свойство.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме