使用constantize的安全性影响

时间:2014-05-19 11:37:55

标签: ruby-on-rails ruby security

我目前正在审核一些Rails控制器。该控制器接受用户输入,并根据该用户输入创建一个新对象,如下所示:

clazz = params[:type].classify.constantize
clazz.new(some_method_which_returns_filtered_params)

我关心这种方法的安全性。 Ruby中是否存在可以恶意使用“新”方法的类?

例如,可能会使用新符号导致程序泛滥而导致拒绝服务(请参阅http://brakemanscanner.org/docs/warning_types/denial_of_service/)。

1 个答案:

答案 0 :(得分:4)

我建议在执行之前限制此代码为params [:type]接受的值。例如,使用像

这样的if块
if %w(foos bars bazzes).include?(params[:type])
  clazz = params[:type].classify.constantize
  clazz.new(some_method_which_returns_filtered_params)
end

我不认为DOS攻击是在这里进行classify.constantize的一个特定问题:如果有人用你的请求来摧毁你的服务器,那么无论你在实际的控制器中做什么,都会攻击你。

防止DOS攻击很难。保护网络应用程序是一个巨大的主题,但特别是你似乎在谈论这里的“消毒参数”领域。看一下 http://guides.rubyonrails.org/security.html

我无法抗拒链接到这个经典的XKCD条:http://xkcd.com/327/