Являются ли параметры метода .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
Ответ 2
Они не дезинфицируются так же, как предложение .where с ?, но вы можете использовать #sanitize_sql_for_order: