Уязвимости GSON или эксплойты при десериализации, чтобы избежать
-
28-10-2019 - |
Вопрос
Я планирую использовать метод gson fromJson () для анализа строки, поступающей из браузера.Связаны ли с этим какие-либо потенциальные уязвимости?Тип данных, в который я конвертирую, относительно прост: список и логическое значение.Но так как gson использует отражение, есть ли мне что-то остерегаться?
Например, со старым jvm (до 6.24), DOS-атака могла быть использована против целых чисел, где целочисленный синтаксический анализатор зависал.
Может ли какой-нибудь умный json заставить gson начать загрузку классов?
Решение
При использовании Gson нужно следить за тем, какой тип построителя вы используете (см. настраиваемый десериализатор / сериализатор)
У Gson есть еще одна слабость: когда вы десериализуете (скажем, используя пользовательский), вам лучше проверить тип объекта, который вы передаете (используйте instanceof).
Другой важный момент: Gson автоматически преобразует переменную в зависимости от переданного типа.
т.е.{"var1": 1, "var2": "1"} Первое будет преобразовано в целое число, второе - в строку, поэтому я буду следить за преобразованием ваших объектов.
Другие советы
По соображениям безопасности разработчик проекта Gson рекомендовал не разрешать коду десериализации загружать определения классов, заданные пользователем - десериализацию объектов общего типа следует тщательно контролировать.
Написать парсер JSON не так уж сложно, и любая широко используемая версия с открытым исходным кодом должна быть настолько безопасной, насколько можно надеяться.Конечно, синтаксический анализатор может содержать ошибку, которая приводит к переполнению буфера и т.п., но, опять же, логика достаточно проста, и этого не должно происходить, если код достаточно хорошо написан и хорошо проанализирован.
Более серьезная опасность состоит в том, что вы сами не можете должным образом проверить результаты синтаксического анализа и принять, скажем, число, которое выходит за пределы диапазона вашего приложения, или слишком длинную строку.