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