避免sql注入ActiveRecord命令

时间:2013-08-19 18:33:05

标签: ruby-on-rails activerecord sql-injection

我试图在订购时避免使用sql注入,但我还需要确保NULLS是最后一次。

query = books.order(@vals['order'] + ' NULLS LAST')

但如果我将@vals ['order']作为API参数,我很容易受到sql注入。是否有更好的方法来形成订单以避免这种情况?

1 个答案:

答案 0 :(得分:1)

如果这只是一个API,我只会向您的API消费者提供某些类型的订购,并在您的代码中预先获取订单标准(例如白名单方法)。

if @evals['order'] == 'title'
  ordering = 'title'
elsif @evals['order'] == 'published'
  ordering = 'created_at'
else
  ordering = 'id'
end

query = books.order(ordering + ' NULLS LAST')

这不是最漂亮的代码,但至少在没有解析参数的情况下你会安全。