应该保护哪些字段不受批量分配?

时间:2011-01-10 21:13:57

标签: ruby-on-rails security

我正在对Rails 2.3.8应用程序进行安全审核,其中一个问题是我的模型定义中缺少attr_protectedattr_accessible。我理解他们背后的原因,甚至written a gem来帮助进行大规模分配,但我正在寻找可能会遗漏的属性。

我遇到的问题是确定哪些字段应该受到保护。人们通常会遵循这些规则吗?我在想像外键和像管理员这样的布尔值?保护会有意义。我也想知道像STI类型和多态* _type / * _ id字段这样的字段。我看到Rails 3引入了attributes protected by default,但Rails 2.3.8似乎没有这个。

对此的任何指导将不胜感激。

2 个答案:

答案 0 :(得分:5)

我的一般经验法则是,您不希望用户修改的任何属性都应受到保护。

因此,在我的模型中,我将attr_accessible用于表单中作为字段存在的所有属性。所有其他人都受到保护(我宁愿默认保护所有内容。)

换句话说:假设客户端发送的所有数据都将被恶意篡改。

修改:相关博文http://www.kalzumeus.com/2010/09/22/security-lessons-learned-from-the-diaspora-launch/

答案 1 :(得分:0)

我想每个“有潜在危险”的属性都应该受到保护,就像用户的管理标志一样。

在我看来,理想情况下,每个模型都应该具有可更新的所有属性的attr_accessible。这是更安全的解决方案。