Rails:保护模型中的额外字段(质量分配)?

时间:2012-08-09 22:25:15

标签: ruby-on-rails ruby forms security

我的模型Secret有3个字段:f1f2f3
我有表单,用户只能输入 <{strong> f1f2不是f3
将值传递给新对象的最佳方法是什么?

如果我要写@secret = Secret.new(params[:secret]),恶意用户可以将f3传递给我的模型,它将保存在模型中。

阻止用户传递额外值的最佳方法是什么?

我读过http://guides.rubyonrails.org/security.html#mass-assignment并且有3种变体:
1)黑名单(attr_protected :f3
2)白名单(attr_accessible :f1, :f2
3)全局白名单(按配置行attr_accessible强制config.active_record.whitelist_attributes = true

哪种方法最好?

1 个答案:

答案 0 :(得分:2)

最偏执(因此也是最好)的设置是attr_accessible :f1, :f2config.active_record.whitelist_attributes = true相结合。

如果稍后添加任何新属性(通过添加迁移),则必须激活启用批量对齐的新属性。如果您只是将禁用列表黑名单,您可能会忘记将新属性添加到黑名单中。如果您使用白名单,则不会发生这种情况。