ruby-on-rails - 使用常量化的安全影响

标签 ruby-on-rails ruby security

我目前正在审查一些 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 block
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 的特定问题:如果有人用请求向您的服务器发送垃圾邮件,那么无论您在实际 Controller 中做什么,DOS 都会攻击您。

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

我忍不住链接到这个经典的 XKCD 片段:http://xkcd.com/327/

关于ruby-on-rails - 使用常量化的安全影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23736761/

相关文章:

javascript - 为什么javascript是: URIs allowed in the src attribute of <img> tags?

.net - 如何测试主机名是否指本地机器

ruby-on-rails - 如果记录不存在则创建

ruby - ruby 中的二叉搜索树

ruby - 选择具有动态 id 的 CSS 元素

ruby-on-rails - Spree Deface::Override :original 关键字是什么?

asp.net - 如何在 IIS 中使用 nonce 进行内容安全策略?

sql - 在 Rails Console for PostgreSQL 的表中显示数据

ruby-on-rails - 如何使用 ruby​​ on rails 中的 paypal-express gem 解决 10007 - "permission denied"PayPal API 错误

ruby-on-rails - 删除后刷新页面