Безопасное удаление строк для фрагментов SQL для объединений, ограничений, выбора и т.д. (А не условий) в Rails
В Ruby on Rails для условий легко сделать запросы на SQL-инъекцию:
:conditions => ["title = ?", title]
где название происходит извне, из веб-формы или что-то в этом роде.
Но что, если вы используете фрагменты SQL в других частях запроса, например:
:select => "\"#{title}\" AS title" # I do have something like this in one instance
:joins => ["LEFT JOIN blah AS blah2 ON blah2.title = \"#{title}\""]
Есть ли способ правильно избежать этих строк?
Ответы
Ответ 1
Обычно в Rails объединения выполняются как символ (или как хэш для соединений второго порядка), представляющий объединение id, и вы используете условия для его фильтрации. Если вам нужно сделать это, как показано, вы можете использовать ActiveRecord sanitize_sql_array
для очистки строки SQL, например:
sanitize_sql_array(["LEFT JOIN blah AS blah2 ON blah2.title = ?", @blah.title])