допустим, у меня есть страница со списком пользователей, и вы можете сортировать по разным столбцам, при нажатии на кнопку «электронная почта» она будет передавать sort_by = email sort_direction = asc или desc
sort_by = "email" # really params[:sort_by]
sort_direction = "asc" # really params[:sort_direction]
User.order("#{sort_by} #{sort_direction}")
# SELECT "users".* FROM "users" ORDER BY email asc
, чтобы это работалокак и ожидалось, однако, если мы изменим sort_by
sort_by = "email; DELETE from users; --"
User.order("#{sort_by} #{sort_direction}")
# SELECT "users".* FROM "users" ORDER BY email; DELETE from users; -- asc
, теперь у нас больше нет пользователей: (* 1007 *
Я могу вручную создать белый список допустимых sort_by и сравнить параметры [: sort_by] с этим, но надеялся, что есть какой-то встроенный способ справиться с такими вещами