批量分配是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
答案 0 :(得分:0)
由于accepts_nested_attributes_for
,值可能会导致质量分配问题。但是,如果您没有使用accepts_nested_attributes_for
,那么这可能是误报。
注意Brakeman会返回一个弱的"此代码的置信度警告。像大多数Brakeman"弱"信心警告,这是你应该看一下的代码,但可能不是问题。
您可以使用Brakeman's ignore configuration来忽略误报。您还可以通过-w 2
运行Brakeman来忽略弱信心警告。也可以使用-x MassAssignment
关闭质量分配警告但我不建议这样做,因为您运行的是古老的(可能非常易受攻击的)Rails版本。