предотвращение впрыска sql для метода create в контроллере rails - PullRequest
7 голосов
/ 27 января 2010

Как видно в comment_controller.rb:

def create
    @comment = Comment.new(params[:comment])
    @comment.save
end

Я предполагаю, что это небезопасно для SQL-инъекций. Но как правильно это сделать? .. Все примеры в сети касаются находок.

Ответы [ 2 ]

7 голосов
/ 27 января 2010

Этот код защищен от атак SQL-инъекций. Экранирование выполняется ActiveRecord, поэтому каждый раз, когда вы вызываете модель find, create, new / save или любой другой метод, который взаимодействует с базой данных, вы в порядке. Единственное исключение - если вы используете сырой SQL для одного из параметров, например:

Comment.find(:all, :conditions => "user_id = #{params[:user_id]}")

предпочтительная форма:

Comment.find(:all, :conditions => {:user_id => params[:user_id]})

, который будет автоматически защищен от внедрения SQL.

4 голосов
/ 27 января 2010

Обратите внимание, что ваш пример кода защищен от внедрения SQL, как объяснил Алекс, но он небезопасен от эксплойтов массового назначения .

...