Возможно ли внедрение nosql для Ruby on Rails с Mongoid? - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь выяснить, возможна ли инъекция nosql на Ruby on Rails с монго и монгоидными драгоценными камнями.

Я выполнял запросы Mongodb, используя Mongo::Client коллекции и модели с включением Mongoid::Document.

Я пытался передать некоторые командные символы, такие как ' " \ ; { }, но он был очищен. Передача GET search?title[$ne]=foo была охарактеризована как {"title"=>"{\"$ne\"=>\"foo\"}"}, поэтому здесь проблем не возникает.

Возможна ли какая-либо инъекция nosql, если я использую обычные методы стека этой технологии?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Обычные операции, включая запросы и вставки / обновления в Mongoid, дезинфицируют их входные данные, поэтому в большинстве случаев не нужно беспокоиться о «инъекции nosql».

Однако существуют методы, которые передают команды непосредственно в базу данных.и в этих случаях важно тщательно продумать, может ли неанизированный пользовательский ввод оказаться в качестве команды базы данных.Например, если Post является моделью Mongoid, можно создать следующую команду, чтобы создать бесконечный цикл на сервере MongoDB:

Post.all.map_reduce('function(){while(true);}','function(){}').out(inline:1).count

Другой пример - метод Database#command, предоставленный драйвером для запуска произвольной базы данных.команды: http://api.mongodb.com/ruby/current/Mongo/Database.html#command-instance_method. Если приложение помещает пользовательский ввод в параметры, заданные для этого метода, это создает потенциал для «nosql инъекции».

Обратите также внимание, что нет необходимости передавать неожиданный команда в базу данных - иногда неожиданно data достаточно.См., Например, https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS. Если предположить, что модель Post имеет поле body, передача произвольного регулярного выражения от пользователя может быть проблематичной:

# This might take a while
Post.where('body' => {'$regex' => '((a|a?|a*)*)*$'}).count
1 голос
/ 15 мая 2019

Это из mongdodb документов

Когда клиентская программа собирает запрос в MongoDB, она создает объект BSON, а не строку.Таким образом, традиционные атаки SQL-инъекций не являются проблемой.Подробности и некоторые нюансы описаны ниже.

MongoDB представляет запросы в виде объектов BSON.Обычно клиентские библиотеки предоставляют удобный, не требующий инъекций процесс создания этих объектов.Рассмотрим следующий пример C ++:

https://docs.mongodb.com/manual/faq/fundamentals/#how-does-mongodb-address-sql-or-query-injection

...