0

我对 Rails 很陌生,我正在查看其他一些代码。我注意到,如果我尝试使用 create() 创建模型对象的实例,我会收到一条错误消息,告诉我无法使用批量分配创建模型对象。我知道在对象创建中与批量分配相关的危险。但是,在我用作参考的某些来源中,这似乎没有必要。这是 Rails 3.2.7 的新功能吗?还是我做错了什么?

因此,如果我有一个名为“Person”的模型并且我想创建一个新模型:

person = Person.create(:first_name => "Some", :last_name => "Dude") #throws exception

我一直在做的是将其添加到 Person 类定义中:

attr_accessible :first_name, :last_name

person = Person.create(:first_name => "Some", :last_name => "Dude") #now this is OK

在每个模型类上定义可访问属性是否正确?

谢谢!

4

2 回答 2

3

从 Rails 3.2 开始,我们在 application.rb 中有一个新的配置设置:

config.active_record.whitelist_attributes = true

这实质上是假设您的所有模型属性都是有罪的,直到被证明是无辜的(列入白名单)。如果将其设置为 true,您必须通过以下任一方式将任何给定属性显式列入白名单:

  1. 通过将它们包含为 attr_accessible 将不易受到攻击的“安全”属性列入白名单。
  2. 明确将您不希望黑客直接访问的不安全属性列入黑名单。这假设所有非黑名单属性都是安全的。

通常,将此配置设置保持为 true 并将您的属性明确列入白名单是一种很好的做法,这样您就不会让您的应用程序容易受到黑客攻击。

请参阅http://railspikes.com/2008/9/22/is-your-rails-application-safe-from-mass-assignment了解为什么应该采用推荐方法的更多信息。

于 2012-10-21T03:32:36.890 回答
2

由于安全性升级,这是 rails 3.2 中的新功能。你可以在黑客爱大规模集结中了解更多信息

attr_accessible :first_name,  :last_name

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

于 2012-10-21T03:21:53.623 回答