Должен ли я избежать условия для моей рельсы найти? - PullRequest
3 голосов
/ 12 февраля 2012

ОК, поэтому у меня есть это условие

conditions = {}
conditions[:state] = params[:state] if params[:state]
@apps = current.apps.paginate(:include => :user, :conditions => conditions, :order => "users.first_name, users.last_name")

, и мой файл маршрутов имеет

 map.apps_wishlist '/apps/wishlist', :controller => 'apps', :action => 'index', :state => 'wishlist' 

Поскольку я отправляю в строке, я должен каким-то образом выйти из sql по соображениям безопасности, и еслиТак как же это лучше всего сделать?

Кто-то предположил, что он считает, что параметры params [: state] должны быть экранированы при вводе в SQL-запрос по соображениям безопасности

1 Ответ

5 голосов
/ 12 февраля 2012

Они не знают, о чем говорят. Пока вы делаете либо

SomeModel.where(:conditions => {:state => params[:state]})
#or
SomeModel.find(:conditions => {:state => params[:state]})
#or
SomeModel.where("state = ?", params[:state])

ActiveRecord будет обрабатывать все экранирование самостоятельно, поэтому приведенный выше код вполне подходит. Единственный случай, который он не охватывает, - это если вы полностью создавали sql, т.е. не до

SomeModel.where("state = #{params[:state]}")

Если вы используете find_by_sql, execute и т. Д., Вы также несете ответственность за побег. Не просто поверьте мне на слово - попробуйте! Возможно, вы захотите взглянуть на рельсы Руководство по безопасности

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