Санизирующие материалы для MongoDB

Я пишу интерфейс REST к программе базы данных MongoDB, и я пытаюсь реализовать функцию поиска. Я бы хотел разоблачить весь интерфейс MongoDB. На самом деле у меня есть два вопроса, но они связаны, поэтому я помещаю их в один пост:

  1. Безопасно ли декодировать ненадежный JSON с помощью модуля Python json, или он похож на модуль pickle, что он может разрешить выполнение произвольного кода?
  2. Безопасно ли передавать этот декодированный JSON функции PyMongo find ()?

One Solution collect form web for “Санизирующие материалы для MongoDB”

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

Однако мы не можем с уверенностью сказать, что результаты json.loads() безопасны для перехода к методу find() pymongo. Хотя метод find() не будет изменять (обновлять или удалять) данные в mongodb, можно обрабатывать намеренно очень плохо выполняемые запросы, например следующее, которое использует специально созданное предложение $where для создания очень низких характеристик производительности:

 {"$where": "function() { for (var i=0; i<1000000; i++) {}; return true; }"} 

Обратите внимание, что это как действительный JSON, так и действительный запрос mongodb.

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

  • PyMongo создает уникальный индекс с двумя или более полями
  • Итерация по словарю для создания списка
  • как определить, существует ли поле?
  • pymongo (python + mongodb) drop collection / gridfs?
  • Удалить нулевой элемент из массива mongo
  • Поиск документа в MongoDB с помощью _id с использованием расширения Flask-pymongo
  • MongoDB ищет каждый dict в списке в коллекции
  • как запросить элемент из списка в pymongo
  • Python - лучший язык программирования в мире.