0

Mass assignment 是 Rails 的一项功能,它允许应用程序从哈希值创建记录。可能会出现两种不同的质量分配警告。第一个是质量分配实际发生的时间。例子:-

User.new(params[:user])

虽然我没有直接使用哈希来映射表中可用的字段。相反,我正在做类似的事情:

User.new(:first_name => params[:first_name], :last_name => params[:last_name ], :address => params[:address])

或者

user.update_attributes(:first_name => params[:first_name], :last_name => params[:last_name ], :address => params[:address])

为什么这会导致批量分配漏洞?由于我不是盲目地分配哈希值,因此我选择性地只更新了表的少数属性。

对此的一种解决方法是执行以下操作:

user = User.new
user.first_name = params[:first_name]
user.last_name = params[:last_name ],
user.address = params[:address]
user.save

但这就像编写不必要的代码一样,因此 Brakeman 不会将此作为问题警告。这实际上是在 4 行而不是单行中做同样的事情。

有人可以让我了解这里的实际问题是什么,或者确认这是一个错误警报,还有什么方法可以防止这个错误警报出现?

我正在使用 ruby​​ 1.8.7、Rails 2.3.2、Brakeman 3.0.5

4

1 回答 1

1

由于accepts_nested_attributes_for. 但是,如果您不使用,accepts_nested_attributes_for那么这可能是误报。

请注意,Brakeman 会为此代码返回“弱”置信度警告。像大多数 Brakeman 的“弱”置信警告一样,这是您应该查看的代码,但可能不是问题。

您可以使用Brakeman 的忽略配置来忽略误报。您还可以通过使用 运行 Brakeman 来忽略弱置信度警告-w 2。也可以关闭批量分配警告,-x MassAssignment但我不建议这样做,因为您正在运行一个古老的(并且可能非常脆弱)版本的 Rails。

于 2016-08-01T14:53:05.000 回答