Уязвимости GSON или эксплойты при десериализации, чтобы избежать

StackOverflow https://stackoverflow.com/questions/8403277

Вопрос

Я планирую использовать метод gson fromJson () для анализа строки, поступающей из браузера.Связаны ли с этим какие-либо потенциальные уязвимости?Тип данных, в который я конвертирую, относительно прост: список и логическое значение.Но так как gson использует отражение, есть ли мне что-то остерегаться?

Например, со старым jvm (до 6.24), DOS-атака могла быть использована против целых чисел, где целочисленный синтаксический анализатор зависал.

Может ли какой-нибудь умный json заставить gson начать загрузку классов?

Это было полезно?

Решение

При использовании Gson нужно следить за тем, какой тип построителя вы используете (см. настраиваемый десериализатор / сериализатор)

У Gson есть еще одна слабость: когда вы десериализуете (скажем, используя пользовательский), вам лучше проверить тип объекта, который вы передаете (используйте instanceof).

Другой важный момент: Gson автоматически преобразует переменную в зависимости от переданного типа.

т.е.{"var1": 1, "var2": "1"} Первое будет преобразовано в целое число, второе - в строку, поэтому я буду следить за преобразованием ваших объектов.

Другие советы

По соображениям безопасности разработчик проекта Gson рекомендовал не разрешать коду десериализации загружать определения классов, заданные пользователем - десериализацию объектов общего типа следует тщательно контролировать.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top