批量分配漏洞
Mass Assignment Vulnerability
我有一个模型 A
例如:
class A < ActiveRecord::Base
validates_uniqueness_of :name
attr_accessible :name
end
我想删除属性 :name
上的批量分配漏洞。所以我从这个模型中删除了行 attr_accessible :name
。这个模型没有控制器,所以我没有写任何强参数。该模型在 helper B.rb
中使用如下:
num_users = A.where(:name => "NEW").count
我是否需要以任何方式更改此行,或者在我从模型中删除 attr_attributed :name
后此行是否仍然有效?
它会很好用,批量赋值保护只在你批量赋值时,即。您一次分配了很多属性(例如 A.create(params)
),并且也只有当您使用进入控制器的 params
时,即。使用您创建的哈希自己进行批量分配时,您将永远不会遇到这个问题。
首先,这一行 num_users = A.where(:name => "NEW").count
无论是否使用质量分配都可以正常工作。这是因为 where
方法没有将数据分配给模型记录。
另一方面,很少看到带有 ruby-on-rails-4 和 mass-assignment 标签的问题(只有 7 个同时带有两者)。
这是因为Rails 4 把mass_assignment去掉,换成strong_parameters,可以在rails guides upgrade to 4.0.
找到
如果行 attr_accessible :name
在您的 rails 4 应用程序上运行良好。那么你的 Gemfile 中必须有 protected_attributes gem。
必须有充分的理由将 protected_attributes gem 添加到 Rails 4 应用程序。如果没有,您可以从 Gemfile 中删除 do bundle install 并从您的模型中删除所有 attr_accessible ...
行。并且还从模型的操作(新建、创建、创建!、update_attributes 和 update_attributes!、assign_attributes)中删除 :without_protection => true
参数。
如果您将 gem protected_attributes 保留在 Gemfile 中。然后,当您需要更新某些不是 attr_accessible
的字段时,您必须向操作添加参数 without_protection: true
。这样:
A.create({name: 'NEW'}, without_protection: true)
并且记录将存储在数据库中。不然不行。
我有一个模型 A
例如:
class A < ActiveRecord::Base
validates_uniqueness_of :name
attr_accessible :name
end
我想删除属性 :name
上的批量分配漏洞。所以我从这个模型中删除了行 attr_accessible :name
。这个模型没有控制器,所以我没有写任何强参数。该模型在 helper B.rb
中使用如下:
num_users = A.where(:name => "NEW").count
我是否需要以任何方式更改此行,或者在我从模型中删除 attr_attributed :name
后此行是否仍然有效?
它会很好用,批量赋值保护只在你批量赋值时,即。您一次分配了很多属性(例如 A.create(params)
),并且也只有当您使用进入控制器的 params
时,即。使用您创建的哈希自己进行批量分配时,您将永远不会遇到这个问题。
首先,这一行 num_users = A.where(:name => "NEW").count
无论是否使用质量分配都可以正常工作。这是因为 where
方法没有将数据分配给模型记录。
另一方面,很少看到带有 ruby-on-rails-4 和 mass-assignment 标签的问题(只有 7 个同时带有两者)。
这是因为Rails 4 把mass_assignment去掉,换成strong_parameters,可以在rails guides upgrade to 4.0.
找到如果行 attr_accessible :name
在您的 rails 4 应用程序上运行良好。那么你的 Gemfile 中必须有 protected_attributes gem。
必须有充分的理由将 protected_attributes gem 添加到 Rails 4 应用程序。如果没有,您可以从 Gemfile 中删除 do bundle install 并从您的模型中删除所有 attr_accessible ...
行。并且还从模型的操作(新建、创建、创建!、update_attributes 和 update_attributes!、assign_attributes)中删除 :without_protection => true
参数。
如果您将 gem protected_attributes 保留在 Gemfile 中。然后,当您需要更新某些不是 attr_accessible
的字段时,您必须向操作添加参数 without_protection: true
。这样:
A.create({name: 'NEW'}, without_protection: true)
并且记录将存储在数据库中。不然不行。