1

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

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

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

4

1 回答 1

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')

这不是最漂亮的代码,但至少你不需要解析参数就可以安全了。

于 2013-08-19T18:40:44.363 回答