Django JSON De-сериализация Безопасность - PullRequest
12 голосов
/ 07 марта 2012

Есть ли известные уязвимости в безопасности с десериализатором JSON от Django? Что касается десериализационных протоколов Python, то, по общему мнению, они совершенно небезопасны, поэтому избегайте анализа ненадежных данных.

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

Обычно я вижу сериализатор JSON Django в общедоступных средах, поэтому я надеюсь, что он защищен от подобных вещей, но я не смог найти никакой документации, касающейся каких-либо проблем безопасности.

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

По умолчанию при использовании simplejson , который является десериализатором по умолчанию, используемым Django, типы объектов, которые могут быть преобразованы из JSON в объект Python, ограничены.Единственный способ, которым это не так, это если вы выполняете какое-то специализированное декодирование с использованием необязательных аргументов для методов loads() или load() или вашего собственного JSONDecoder object.

Так что, пока вы используете декодирование по умолчанию, вы в полной безопасности.Но, если вы действительно обеспокоены, вы должны проверять загруженные данные JSON, ПРЕЖДЕ ЧЕМ вы на самом деле что-то делаете с ними.

3 голосов
/ 07 марта 2012

Мне трудно понять, что, по вашему мнению, может быть небезопасным (или безопасным) в отношении JSON.

JSON - это текстовый формат обмена данными. Он не имеет встроенной безопасности. Django поставляется с некоторыми функциями для сериализации и десериализации наборов запросов в JSON. Но они не могут быть «злонамеренными» или «небезопасными» - это просто данные.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...