Санитарная обработка входов в MongoDB - PullRequest
4 голосов
/ 02 сентября 2011

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

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

1 Ответ

6 голосов
/ 02 сентября 2011

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

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

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

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

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

...