rails: защищает ли метод сборки от SQL-инъекций - PullRequest
1 голос
/ 07 июля 2010

Защищает ли build от внедрения sql?

Пример:

@post = @user.posts.build(params[:post])
@post.save

Не видел сборки в документации по рельсам.

Спасибо!

1 Ответ

2 голосов
/ 07 июля 2010

build сам ничего не записывает в базу данных, поэтому внедрение SQL не применяется. Когда вы вызываете save, не имеет значения, был ли объект создан с помощью build или с помощью другого механизма, такого как передача атрибутов в new или с использованием отдельных методов attribute=, тот же код будет использоваться для сохранения вашего объекта в базу данных.

Из документации о сборке :

Возвращает новый объект коллекции тип, который был создан с атрибуты и связанные с этим объектом через таблицу соединений, но не имеет еще был сохранен.

Метод save будет экранировать любые кавычки и т. Д. В значениях вашего атрибута, используя метод, соответствующий используемой вами базе данных (например, MySQL), так что результирующий запрос insert или create не будет подвержен внедрению SQL , То же самое относится к update_attributes и к любым параметризованным :conditions, которые вы передаете find. Время, когда вам нужно быть осторожным и, возможно, придется выполнять какое-то ручное экранирование, это когда вы когда-нибудь передаете литеральные строки в соединение с базой данных в виде запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...