Re:GitHub Enterprise SQL Injection
by true_religion on Sunday January 08, 2017 @06:38AM
(#13349303)
Django for example will throw an error if an ordering parameter does not correspond to a database column.
If you have to specify all the columns of a table in Rails, then ActiveRecord ought to be able to restrict the order params to only column names.
I imagine some ORMs don't have this so people can do order by computed columns like "order by assets - liabilities"
To your point it probably makes sense to have an order method that verifies column names and an order_raw method that takes a string so the caller understands the risk, while protecting the usual case.
http://rails-sqli.org
The lesson is you should always strongly assert the type of user input (where you can, convert to known good values which is even better), and never magically convert types as rails/ MySQL does here. It's less convenient but safer.