Рельсы SQL-инъекции?

в Rails, когда я хочу найти пользователем заданное значение и избежать SQL-инъекции (escape apostrophes и тому подобное), я могу сделать что-то вроде этого:

Post.all(:conditions => ['title = ?', params[:title]])

Я знаю, что небезопасный способ сделать это (возможная SQL-инъекция) заключается в следующем:

Post.all(:conditions => "title = #{params[:title]}")

мой вопрос в том, предотвращает ли следующий метод SQL-инъекцию или нет?

Post.all(:conditions => {:title => params[:title]})

3 ответов


Да, это делает. Только второй опасен.


один хорошая ссылка из руководств RoR.


+1 @fphilipe и @yuval проверьте это 5 мин видео от railscast и от направляющие