Подтвердить что ты не робот

Безопасность Django JSON

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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