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