如何设置’attr_accessible’以便不允许使用Ruby on Rails访问任何模型的字段?
如果在模型文件中我只有这个代码:
class Users < ActiveRecord::Base end
这意味着什么? 是否可以访问与模型相关的所有属性?
如何设置’attr_accessible’以便不允许访问该模型的任何字段?
刚设置:
class Users < ActiveRecord::Base attr_accessible #none end
就像Pan Thomakos所说的那样(attr_accessible是可以进行质量转换的参数数组。因此,如果您不发送符号,则无法访问任何参数。
这张票很有用
默认情况下,属性都是attr_accessible(这意味着它们可以设置我的质量分配)。
- attr_accessible – 只有这个属性列表可以通过质量分配(白名单)来设置。
- attr_protected – 无法通过质量分配(黑名单)设置这些属性。
- attr_readonly – 除了创建记录时,不能设置这些属性。
要完全禁用质量分配,请使用以下内容:
ActiveRecord :: Base.send(:attr_accessible,nil)
此命令将禁用所有活动记录对象的质量分配,但如果要在某些情况下进行质量分配而在其他情况下不需要,则可以指定一个或多个模型来执行此命令。
从Rails 3.1开始,以下配置选项可用于在所有模型上默认禁用质量分配,直到您显式调用attr_accessible或attr_protected:
config.active_record.whitelist_attributes = true
见http://edgeguides.rubyonrails.org/security.html#mass-assignment和https://github.com/rails/rails/commit/f3b9d3aba8cc0ffaca2da1c73c4ba96de2066760
我更喜欢在拒绝一个模型时更明确:
class Users < ActiveRecord::Base attr_accessible nil end
结果与没有参数的attr_accessible
相同,但会使您的意图更加清晰。 这将降低未来程序员(例如你自己!)删除该行的可能性......或者开始向attr_accessible添加字段。
这使Brakeman和其他漏洞嗅探工具更加贴心。