Обычные операции, включая запросы и вставки / обновления в 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