2

我在 Rails 和面向对象编程中迈出了第一步。我想了解一些非常基本的东西:为什么我们需要attr_accessible在模型中?

我已经读到黑客可以使用批量分配来更改数据库条目并因此损害安全性,这就是敏感字段需要保护的原因(atribute_protected在这种情况下使用)。

attr_accessible相反的atribute_protected吗?如果是这样,为什么我们需要说明哪些字段是可访问的,哪些是不可访问的?那些字段不能被默认访问吗?以及是attr_accessor用来做什么的?

我注意到,如果我不使某些字段可访问,我的应用程序将无法运行。我可以将 attr_accessible 用于敏感字段,例如 :password_digest 和 :admin 吗?

如果有人可以向我解释,那就太棒了。

一切顺利,TimmyOnRails

4

1 回答 1

3

您在这里混合了几个概念,所以我将尝试解开它们。

attr_accessor用于设置可读可写属性。相当于说attr_readerand attr_writer。由于您的问题不是直接关于 的attr_accessor,因此我不会再解决它,而是说在Accessors上查看此链接。


根据 Rails 文档:attr_accessible与 attr_protected 宏相反

您是正确的,这些方法用于防止批量分配漏洞。

  • attr_accessible表示可以通过批量分配设置哪些属性。
  • attr_protected表示不能通过批量分配设置哪些属性。

那么每个的用例是什么?在一种情况下,您可以设置一个全局配置选项,以便必须声明所有属性attr_accessible

config.active_record.whitelist_attributes = true

在那种情况下,你会attr_accessible经常使用。

attr_protected?如果您采取相反的方式并false在白名单属性上说,您将如何声明哪些属性不应该是可批量分配的?如果你说attr_protected你是对的!:D

通常,您希望将字段设置:admin为 as,attr_protected因为您不希望攻击者进入并将其权限提升为管理员角色。

批量分配不是一件容易做到的事情。大而聪明的开发团队搞错了。所以要小心谨慎,确保你明白发生了什么!

于 2012-09-19T02:53:58.673 回答