rails 3 activerecord order - какова правильная работа с sql-инъекцией?

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

14
задан house9 14 October 2011 в 17:07
поделиться