使用模型属性调用Brakeman不安全反射方法constantize

时间:2014-05-19 15:09:51

标签: ruby-on-rails ruby

在我的rails应用程序中,我收到了来自制动器的以下安全警告。使用模型属性调用不安全的反射方法constantize。这是我的代码正在做的事情。


chart_type = Chart.where(
  id: chart_id,
).pluck(:type).first

begin
  ChartPresenter.new(chart_type.camelize.constantize.find(chart_id))
rescue
  raise "Unable to find the chart presenter"
end

根据我的研究,我还没有找到任何具体的解决方案。我听说你可以制作白名单,但我不确定刹车手正在寻找什么。我尝试创建一个数组,并在调用constantize之前检查它,并且breakman仍然抱怨。对此的任何帮助都会很棒。如果你觉得它不是一个必要的解决方案,你能详细说明它为什么不应该成为一个问题吗?

1 个答案:

答案 0 :(得分:12)

你可以走另一条路,找到名字为chart_type的课程:

chart_class = [User, Category, Note, Post].find { |x| x.name == chart_type.classify }
if chart_class.nil?
  raise "Unable to find the chart presenter"
end
ChartPresenter.new(chart_class.find(chart_id))

这样Brakeman应该开心,你更安全......