Если я помещу все свои столбцы базы данных в 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. Но они не могут быть изменены пользователем, пока он не подтвердит свою электронную почту, поэтому здесь нет проблем, пока вы не измените поведение устройства по умолчанию. Также я не понимаю, почему вы должны сделать их доступными.

Другие вопросы по тегам