我目前正在审查一些 Rails Controller 。该 Controller 接受用户输入并基于该用户输入创建一个新对象,如下所示:
clazz = params[:type].classify.constantize
clazz.new(some_method_which_returns_filtered_params)
我担心这种方法的安全性。 Ruby 中是否存在可以恶意使用“new”方法的类?
例如,可能会用新符号淹没程序,导致拒绝服务(请参阅 http://brakemanscanner.org/docs/warning_types/denial_of_service/)。
最佳答案
我建议在执行之前限制此代码将接受的 params[:type] 值。例如,带有
这样的 if blockif %w(foos bars bazzes).include?(params[:type])
clazz = params[:type].classify.constantize
clazz.new(some_method_which_returns_filtered_params)
end
我不认为 DOS 攻击是这里执行 classify.constantize 的特定问题:如果有人用请求向您的服务器发送垃圾邮件,那么无论您在实际 Controller 中做什么,DOS 都会攻击您。
防止 DOS 攻击很难。保护网络应用程序是一个庞大的主题,但特别是您似乎在这里谈论“清理参数”领域。看一下 http://guides.rubyonrails.org/security.html
我忍不住链接到这个经典的 XKCD 片段:http://xkcd.com/327/
关于ruby-on-rails - 使用常量化的安全影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23736761/