1

我有一个Secret具有 3 个字段的模型f1f2f3
我有一个表单,用户只能输入 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_accessibleconfig.active_record.whitelist_attributes = true

什么方法最好?

4

1 回答 1

2

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

如果您稍后添加任何新属性(通过添加迁移),则必须主动启用新属性以进行批量分配。如果您只是将禁止的属性列入黑名单,您可能会忘记将新属性添加到黑名单中。如果您使用白名单,则不会发生这种情况。

于 2012-08-09T22:47:06.933 回答