ruby-on-rails - 在我的订单子(monad)句中传递参数是否让我可以选择进行 sql 注入(inject)?

标签 ruby-on-rails ruby

如果我这样做:

User.where(....).order("#{params[:order]} #{params[:dir]}")

如果不是,那么为了辩论的缘故,说我想偏执并确保符号 :order 和 :dir 的值在一个范围内,我该怎么做?

假设我创建了一个允许的安全值数组:

safe_order = %[:updated_at :created_at]

确保 params[:order]nil 或包含 safe_order 数组中的值之一的 ruby​​ 方法是什么?

最佳答案

看看http://railscasts.com/episodes/228-sortable-table-columns

具体一些检查参数或返回默认值的小方法:

 def index
   @products = Product.order(sort_column + " " + sort_direction)
 end

 # ...

 private

 def sort_column
   Product.column_names.include?(params[:sort]) ? params[:sort] : "name"
 end

 def sort_direction
   %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
 end

关于ruby-on-rails - 在我的订单子(monad)句中传递参数是否让我可以选择进行 sql 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6740878/

相关文章:

ruby-on-rails - 与 attr_accessor 相比,ActiveRecord 如何定义方法?

ruby-on-rails - 如何找出以相同单词开头的键?

ruby-on-rails - 在Rails Multi-Tenancy 应用程序中寻找有关Amazon S3存储桶设置和管理的建议

ruby-on-rails - 功能得分属性可根据无法与 Elasticsearch 和 rails 配合使用的点击对搜索进行排名

ruby - 从 github 存储库全局安装 ruby​​ gem

ruby - Ruby block 的问题

ruby - 在 ruby​​ 脚本中运行时使用 'system' 方法抑制命令运行的输出

mysql - 我的十进制数在创建时会缩短,但在编辑时不会

mysql - 更改编码、rails 和 mysql

ruby-on-rails - 确保 JSON 响应仅包含带有 rspec 的 X 键