ken*_*enn 5 ruby-on-rails mass-assignment mongoid
这是代码:
class M
include Mongoid::Document
field :name
end
params = { name: "foo", age: 20 }
M.create(params)
#=> #<M name: "My Name", age: 20>
Run Code Online (Sandbox Code Playgroud)
请注意,age未定义但已保存.
这是有问题的(可能是DoS的来源),因为恶意用户可以在POST中添加任何参数,并且大字符串可以潜入未知字段.(例如name=foo&bogus=#{'x'*1000000})
到目前为止,我无法找到任何东西,但attr_accessible,但你必须保持在两个相同的字段名称它不是Mongoid真正伟大field和attr_accessible所有的时间,所有车型.不干.
我认为attr_accessibleAPI非常适合ActiveRecord,因为有一个.您没有明确定义模型(DRY)和b中的字段.保证不存在将不存在的字段保存到RDB的可能性.但对于Mongoid,我认为应该有一个更好的解决方案attr_accessible.
请注意,有一个全局配置设置,allow_dynamic_fields但它不是关于质量分配,所以它超出了本讨论的范围,但是我认为它实际上应该是一个每个模型的宏,并且还应该注意质量分配.
你是如何处理这个问题的?
我总是attr_accessible在模型中使用。我很少发现自己把所有领域都纳入了可及的范围。通常总是有一些字段不应该被批量分配访问。如果您经常需要包含每个属性并且担心重复:
attr_accessible *fields.keys
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |