attr_accessible / секретный вопрос с рельсами - как лучше всего с этим справиться? - PullRequest
1 голос
/ 28 мая 2011

У меня вопрос по безопасности Rails.Допустим, у нас есть модель User, и она имеет много логических значений для ролей, таких как admin, director и т. Д.

Администратор определенно захочет изменить эти значения в формах,поэтому мы хотим использовать attr_accessible, чтобы позволить администратору делать это.

Конечно, другие пользователи также смогут редактировать свою модель пользователя - либо редактирование своего профиля, либо когда они приглашают /добавлять новых пользователей в систему самостоятельно.В случае с режиссером, мы на самом деле хотим, чтобы они устанавливали роли, которые «меньше», чем директор, но мы не хотим, чтобы он мог устанавливать director или admin

, так как мы выставляем этиконтроллеры, которые изменяют пользователей, не позволят ли attr_accessible разрешить установку director и admin в этом случае?Это звучит как очень большая дыра в безопасности.

Так каков наилучший способ ограничения доступа?

  1. Установить каждый параметр, по одному за раз?

  2. Установить admin = false и director = false для действий создания / обновления?Самое простое решение, но довольно неприятно иметь это в контроллере.

  3. Используйте оператор if, чтобы увидеть, может ли эта пользовательская роль редактировать эти атрибуты и разрешать это?

  4. Использовать обратные вызовы рельсов ?, например, before_validation или before_save?

  5. Какое-нибудь другое декларативное решение?

Спасибо

Ответы [ 2 ]

3 голосов
/ 28 мая 2011

В следующем выпуске Rails 3.1 (на данный момент есть кандидат на выпуск) есть новая опция для attr_accessible, которая позволит вам определить роль, которая может переопределить ее на уровне контроллера, передав without_protection => true.

Подробнее об этом можно прочитать здесь: http://www.enlightsolutions.com/articles/whats-new-in-edge-scoped-mass-assignment-in-rails-3-1

И раздел об attr_accessible в руководстве по безопасности рельсов здесь: http://edgeguides.rubyonrails.org/security.html#countermeasures

0 голосов
/ 28 мая 2011

Может пригодиться один из них:

https://github.com/dmitry/attr_accessible_block

https://github.com/thefrontiergroup/scoped_attr_accessible

... позволяющий использовать условия на основе ролей для определения того, какие атрибуты могутбыть установленным.

...