Всем привет! Сегодня мы разберём такую web-уязвимость как Prototype Pollution или "Прототипное загрязнение". Это уязвимость в языке JavaScript, которая позволяет атакующему «загрязнить» поле глобального объекта, которое может наследоваться пользовательскими объектами и создавать угрозу для безопасности приложения. Короче, в JavaScript одни объекты наследуют свойства других, и если мы сможем изменить какой-то родительский объект, то изменятся и другие, этим мы сейчас и займёмся! Допустим у вас есть сайт, на котором есть форма json. Для начала зарегаемся на сайте, а дальше берём нашу форму, и просто пишем туда такой вот json-запрос: {"__proto__":{"isAdmin":true}} Всё, админка наша:) Как защититься? Для начала посмотрим на уязвимый код: А теперь на защищённый: Вы видите то, что вижу я? Да, в первом варианте мы используем прототипирование, а во втором мы создаём полностью новый объект. Использование Object.create(null) гарантирует, что объект не имеет прототипа, а значит, никакое прото