1

我有一个关于 Rails 安全性的问题。假设我们有User模型,它有许多用于角色的布尔值,例如admindirector等。

管理员肯定会想要在表单上编辑这些值,所以我们希望使用attr_accessible让管理员用户执行此操作。

当然,其他用户也可以编辑他们的用户模型——或者编辑他们的个人资料,或者当他们自己邀请/添加新用户到系统时。在导演的情况下,我们实际上希望他们设置比导演“次要”的角色,但我们不希望他能够设置directoradmin

由于我们暴露了这些修改用户的控制器,在这种情况下attr_accessible不允许设置director和设置吗?admin这听起来像是一个非常大的安全漏洞。

那么限制访问的最佳方法是什么?

  1. 设置每个参数,一次一个?

  2. 设置admin = falsedirector = false创建/更新操作?最简单的解决方案,但在控制器中有这个有点讨厌。

  3. 使用 if 语句查看该用户角色是否可以编辑这些属性并允许它?

  4. 使用 rails 回调?,例如before_validationor before_save

  5. 其他一些声明性解决方案?

谢谢

4

2 回答 2

3

即将发布的 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 的部分在这里的 rails 安全指南:http: //edgeguides.rubyonrails.org/security.html#countermeasures

于 2011-05-28T14:45:14.400 回答
0

其中之一可能会有所帮助:

https://github.com/dmitry/attr_accessible_block

https://github.com/thefrontiergroup/scoped_attr_accessible

...允许您使用基于角色的条件来确定可以设置哪些属性。

于 2011-05-28T14:41:20.610 回答