скажем, у меня есть страница со списком пользователей, и вы можете сортировать по разным столбцам, при нажатии на «электронная почта» будет передано 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
, теперь у нас больше нет пользователей: (
Я могу вручную создать белый список действительных sort_by и сравнить параметры [: sort_by ] к этому, но надеялся, что есть какой-то встроенный способ справиться с такими вещами