是否在我的命令子句中传递参数让我选择sql注入



我这样做:

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

如果没有,那么为了论证的缘故,假设我想要偏执,并确保符号:order和:dir的值在一个范围内,我怎么能做到这一点?

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

safe_order = %[:updated_at :created_at]

确保params[:order]nil或包含safe_order数组中的1个值的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

最新更新