Если я помещу все свои столбцы базы данных в attr_accessible, я в безопасности от атаки массового назначения?
Я знаю, что в Rails 3.2 все атрибуты по сути являются "черным списком", что заставляет вас вносить в белый список каждый атрибут через attr_accessible
,
Тем не менее, если я сделаю каждый столбец в моей таблице attr_accessible
Разве это не делает меня уязвимым для массовых атак?
Если нет, то почему нет?
Если да, то какой смысл форсировать белый список?
Это реальный вопрос, потому что в одном из моих производственных приложений я вынужден иметь что-то вроде этого, просто чтобы заставить Devise работать:
attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :confirmed_at, :confirmation_token
Мысли?
2 ответа
Перечисленные столбцы уязвимы в том смысле, что если вы разрешите пользователям обновлять эти записи с помощью массового назначения, они смогут обновлять эти столбцы. Помните, что вам не нужно делать поле доступным, если вы просто будете делать user.foo = 'blah'
- касаются только обращений к update_attributes, создания так далее.
Смысл этого изменения значений по умолчанию состоит в том, чтобы сделать для вас почти невозможным забыть об этом: потому что вы должны внести в белый список атрибуты, которые вы должны продумать, в порядке ли доступ к этим полям. Спросите себя, что может выполнить атака, если они могут изменить эти поля в записях, которые им разрешено обновлять.
Модель attr_accessible скрипит по швам - не так давно в блоге rails была публикация о новом подходе уровня контроллера, который они пробуют.
В вашем примере есть только два поля, которые могут быть использованы для использования процесса авторизации: Verified_at и translation_token. Но они не могут быть изменены пользователем, пока он не подтвердит свою электронную почту, поэтому здесь нет проблем, пока вы не измените поведение устройства по умолчанию. Также я не понимаю, почему вы должны сделать их доступными.