我试图在订购时避免使用sql注入,但我还需要确保NULLS是最后一次。
query = books.order(@vals['order'] + ' NULLS LAST')
但如果我将@vals ['order']作为API参数,我很容易受到sql注入。是否有更好的方法来形成订单以避免这种情况?
答案 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')
这不是最漂亮的代码,但至少在没有解析参数的情况下你会安全。