Brakeman Gem在model.new和model.update_attibutes和model.create

时间:2016-08-01 11:49:52

标签: ruby-on-rails brakeman

批量分配是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

1 个答案:

答案 0 :(得分:0)

由于accepts_nested_attributes_for,值可能会导致质量分配问题。但是,如果您没有使用accepts_nested_attributes_for,那么这可能是误报。

注意Brakeman会返回一个弱的"此代码的置信度警告。像大多数Brakeman"弱"信心警告,这是你应该看一下的代码,但可能不是问题。

您可以使用Brakeman's ignore configuration来忽略误报。您还可以通过-w 2运行Brakeman来忽略弱信心警告。也可以使用-x MassAssignment关闭质量分配警告但我不建议这样做,因为您运行的是古老的(可能非常易受攻击的)Rails版本。