我正在Rails和面向对象编程中完成我的第一步。
我想了解一些非常有用的东西:为什么我们在模型中需要attr_accessible
?
我已经读过,黑客可以使用批量分配来更改数据库条目,从而确保安全性,这就是敏感字段需要保护的原因(在这种情况下使用atribute_protected
)。
attr_accessible
与atribute_protected
相反吗?如果是这样,为什么我们需要说明哪些字段可访问哪些字段不可访问?是不是可以通过defult访问的那些字段?什么是attr_accessor
用于?
我注意到如果我不使某些字段不可访问,我的应用程序就无法运行。我可以对敏感字段使用attr_acessible:password_digest和:admin?
如果有人能向我解释,那就太棒了。
一切顺利, TimmyOnRails
答案 0 :(得分:3)
你在这里混合了几个概念,所以我会尝试解开它们。
attr_accessor
用于设置可读写属性。它相当于说attr_reader
和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
等字段设置为attr_protected
,因为您不希望攻击者进入并将其权限升级为管理员角色。
群发作业并不容易。大而聪明的开发团队已经弄错了。仔细一点,确保你了解发生了什么!