gpt4 book ai didi

ruby-on-rails - 是否可以使用 Mongoid 为 Ruby on Rails 注入(inject) nosql?

转载 作者:行者123 更新时间:2023-12-05 02:12:24 24 4
gpt4 key购买 nike

我正在尝试调查是否可以在 Ruby on Rails 上使用 mongo 和 mongoid gem 进行 nosql 注入(inject)。

我使用 Mongo::Client 集合和包含 Mongoid::Document 的模型来处理 Mongodb 的请求。

我尝试传递一些命令字符,如 ' "\; { } ,但它被清理了。传递 GET search?title[$ne]=foo 是有特征的像 {"title"=>"{\"$ne\"=>\"foo\"}"},所以这里看起来没有任何问题。

如果我使用这个技术栈的普通方法,是否可以进行nosql注入(inject)?

最佳答案

Mongoid 中的常见操作(包括查询和插入/更新)会清理它们的输入,因此大多数时候不需要担心“nosql 注入(inject)”。

但是,有些方法可以将命令直接传递到数据库,在这些情况下,仔细考虑未过滤的用户输入是否最终会成为数据库命令很重要。例如,如果 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 注入(inject)”的可能性。

另请注意,没有必要向数据库传递意外的命令 - 有时意外的数据 就足够了。参见,例如,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

关于ruby-on-rails - 是否可以使用 Mongoid 为 Ruby on Rails 注入(inject) nosql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56140931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com