我正在对Rails 2.3.8应用程序进行安全审核,其中一个问题是我的模型定义中缺少attr_protected
或attr_accessible
。我理解他们背后的原因,甚至written a gem来帮助进行大规模分配,但我正在寻找可能会遗漏的属性。
我遇到的问题是确定哪些字段应该受到保护。人们通常会遵循这些规则吗?我在想像外键和像管理员这样的布尔值?保护会有意义。我也想知道像STI类型和多态* _type / * _ id字段这样的字段。我看到Rails 3引入了attributes protected by default,但Rails 2.3.8似乎没有这个。
对此的任何指导将不胜感激。
答案 0 :(得分:5)
我的一般经验法则是,您不希望用户修改的任何属性都应受到保护。
因此,在我的模型中,我将attr_accessible
用于表单中作为字段存在的所有属性。所有其他人都受到保护(我宁愿默认保护所有内容。)
换句话说:假设客户端发送的所有数据都将被恶意篡改。
修改:相关博文http://www.kalzumeus.com/2010/09/22/security-lessons-learned-from-the-diaspora-launch/
答案 1 :(得分:0)
我想每个“有潜在危险”的属性都应该受到保护,就像用户的管理标志一样。
在我看来,理想情况下,每个模型都应该具有可更新的所有属性的attr_accessible。这是更安全的解决方案。