我正在查看具有此代码的身份验证系统:
# 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应用于这些属性。
评论是否正确,这可以防止用户伪造表单来操纵用户数据?如果是这样,为什么?
答案 0 :(得分:1)
attr_accessible
表示可以通过批量分配访问哪些属性。如果您的控制器上有一个执行批量分配的操作并且您没有使用此方法,则用户可以更改您不打算让它们更改的数据。
在这种情况下,用户可以通过向布尔activated
字段的表单POST添加参数来绕过激活,从而创建用户而不验证他们是否具有合法的电子邮件地址。 (假设它被称为activated
。)如果您的系统可能存在垃圾评论等内容,那将是一个大问题。
答案 1 :(得分:0)
attr_accessible
真正做的是保护其他属性。它与attr_protected
宏相反。 Rails会自动生成thing=
方法,因此attr_protected
比白名单版本attr_accessible
更难使用。
这个想法是保护敏感字段免受操纵URL和表单的用户的影响。