Являются ли параметры метода .order в ActiveRecord дезинфицированными по умолчанию?

Я пытаюсь передать строку в метод .order, например

Item.order(orderBy)

Мне было интересно, будет ли orderBy подвергаться дезинфекции по умолчанию, а если нет, то какой лучший способ его дезинфицировать.

Ответ 1

Заказ не подвергается санитарной обработке. Этот запрос фактически удалит таблицу Users:

Post.order("title; drop table users;")

Вам нужно проверить переменную orderBy перед запуском запроса, если какой-либо способ orderBy может быть испорчен из пользовательского ввода. Что-то вроде этого может работать:

items = Item.scoped
if Item.column_names.include?(orderBy)
  items = items.order(orderBy)
end

Ответ 3

Я использую что-то вроде следующего:

@scoped = @scoped.order Entity.send(:sanitize_sql, "#{@c} #{@d}")

Где Entity - класс модели.