应用于用户相关属性的attr_accessible是否会阻止用户数据伪造?

时间:2009-10-24 21:05:11

标签: ruby-on-rails ruby security

我正在查看具有此代码的身份验证系统:

  # prevents a user from submitting a crafted form that bypasses activation
  # anything else you want your user to change should be added here.
  attr_accessible :login, :email, :password, :password_confirmation, :first_name, :last_name

我不明白为什么将attr_accessible应用于这些属性。

评论是否正确,这可以防止用户伪造表单来操纵用户数据?如果是这样,为什么?

2 个答案:

答案 0 :(得分:1)

attr_accessible表示可以通过批量分配访问哪些属性。如果您的控制器上有一个执行批量分配的操作并且您没有使用此方法,则用户可以更改您不打算让它们更改的数据。

在这种情况下,用户可以通过向布尔activated字段的表单POST添加参数来绕过激活,从而创建用户而不验证他们是否具有合法的电子邮件地址。 (假设它被称为activated。)如果您的系统可能存在垃圾评论等内容,那将是一个大问题。

API documentation for attr_accessible

答案 1 :(得分:0)

attr_accessible真正做的是保护其他属性。它与attr_protected宏相反。 Rails会自动生成thing=方法,因此attr_protected比白名单版本attr_accessible更难使用。

这个想法是保护敏感字段免受操纵URL和表单的用户的影响。