Десериализация данных

Небезопасная десериализация данных в 2017 году вошла в топ-10 уязвимостей веб-приложений. Разберемся, в чем она заключается

На данный момент существует множество сервисов, которые позволяют обмениваться данными в удобном формате JSON. Полученные таким образом данные, чаще всего, забывают проверять на безопасность, априори считая, что данные верны. Но что, если их подделать?

В PHP сериализованные данные, полученные в формате JSON, представляют в формате {"имя_поля": "значение_поля", ... }. Фигурные скобки показывают, что это один объект, который может содержать любое количество полей со значениями. Доступ осуществляется как раз по имени поля.

Представим, что сайт получает данные подобным образом из-вне и выводит результат на странице (допустим, что это контактные данные). Если заменить эти данные на произвольный код, то он выполнится на странице.

Например, код: {"phone": "%3Cscript%3Ealert('hello');%3C%31script%3E"} передается в контроллер, который обрабатывает и выводит его таким образом: $json = json_decode($data);
echo 'Телефон:' . $json->phone;

Конечно, таким образом можно выполнить только JS код, но это тоже может нести в себе огромную брешь в безопасности. Потому надо обязательно перепроверять все данные, полученные со стороны

Данная уязвимость часто используется для проведения DDoS атаки на сервер