【发布时间】:2023-04-01 15:46:01
【问题描述】:
代码如下:
class M
include Mongoid::Document
field :name
end
params = { name: "foo", age: 20 }
M.create(params)
#=> #<M name: "My Name", age: 20>
请注意,age 尚未定义,但已保存。
这是有问题的(可能是 DoS 的来源),因为恶意用户可以在 POST 中添加任何参数,并且带有大字符串的未知字段可以潜入。(例如name=foo&bogus=#{'x'*1000000})
到目前为止,除了attr_accessible,我什么都找不到,但这对于 Mongoid 来说并不是很好,因为您必须在所有模型中始终在 field 和 attr_accessible 中保持相同的字段名称。不干燥。
我认为attr_accessible API 非常适合 ActiveRecord,因为 a. 您没有明确定义模型中的字段 (DRY) 和 b.保证没有机会将不存在的字段保存到 RDB。但是对于Mongoid,我觉得应该有比attr_accessible更好的解决方案。
请注意,有一个全局配置设置 allow_dynamic_fields,但它与批量分配无关,因此超出了本次讨论的范围,但我认为它实际上应该是每个模型的宏,并且还应该处理批量分配.
你是如何处理这个问题的?
【问题讨论】:
-
您找到解决方案了吗?我也面临同样的问题。
标签: ruby-on-rails mongoid mass-assignment