如何设置’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和其他漏洞嗅探工具更加贴心。