Уязвимости GSON или эксплойты при десериализации, чтобы избежать - PullRequest
3 голосов
/ 06 декабря 2011

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

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

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

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

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

2 голосов
/ 06 декабря 2011

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

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

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

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

0 голосов
/ 06 декабря 2011

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

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

...