Ruby on rails 使用constantize的安全影响

Ruby on rails 使用constantize的安全影响,ruby-on-rails,ruby,security,Ruby On Rails,Ruby,Security,我目前正在审查一些Rails控制器。该控制器接受用户输入,并根据该用户输入创建一个新对象,如下所示: clazz = params[:type].classify.constantize clazz.new(some_method_which_returns_filtered_params) 我担心这种方法的安全性。Ruby中是否存在可以恶意使用“新”方法的类 例如,可能会用新符号充斥程序,导致拒绝服务(请参阅)。我建议在执行前限制此代码将接受的params[:type]值。如带有一个if块

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

clazz = params[:type].classify.constantize
clazz.new(some_method_which_returns_filtered_params)
我担心这种方法的安全性。Ruby中是否存在可以恶意使用“新”方法的类


例如,可能会用新符号充斥程序,导致拒绝服务(请参阅)。

我建议在执行前限制此代码将接受的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攻击是执行Classification.constantize的一个具体问题:如果有人向您的服务器发送垃圾邮件请求,那么无论您在实际控制器中做什么,DOS攻击都会攻击您

防止拒绝服务攻击很难。保护web应用程序的安全是一个庞大的主题,但在这里,您似乎特别在谈论“清理参数”领域。看看


我忍不住要链接到这个经典的XKCD条带:

如果不回答您更广泛的问题,我建议在执行它之前限制此代码将接受的参数[:type]的值。例如,使用类似于
if%w(foos-bar-bazzes)的if块。包括?(params[:type])
。我不认为DOS攻击是做
分类的一个具体问题。这里的constantize
:如果有人向你的服务器发送垃圾邮件,那么无论你在实际控制器中做什么,DOS攻击都会对你造成影响。你是对的,这段代码有味道。我至少要对照允许的类名列表检查一下。@limelights-“还没有人攻击过它”不是一种安全措施。而且,“我们没有注意到任何东西”并不意味着你没有被攻击!这也很好地解释了不安全反射: