1

我是 Rails 初学者,目前正在阅读 Michael Hartl 的 Rails 3 教程,并且有一个我非常好奇的问题:
在通过“faker”创建管理员用户和其他 99 个普通用户的上下文中,Hartl 解释了为什么它会将“:admin”添加到用户模型中的 attr_accessible 并因此将“admin:true”添加到“faker”测试代码中的初始化哈希是一个坏主意。相反,他解释说应该使用“toggle!(:admin)”并避免在可访问属性中添加“:admin”,否则恶意用户可以直接发送 PUT 请求,如“PUT /users/17?admin=1”。 http://ruby.railstutorial.org/book/ruby-on-rails-tutorial#sec:revisiting_attr_accessible

因此,按照 Hartl 的建议,我的管理员布尔值现在是安全的,但是我的其他用户属性(例如姓名、电子邮件)被定义为可访问属性呢?这是否意味着恶意用户可以通过类似于上述的 PUT 请求轻松更改这些属性?在教程中,Hartl 谈到了一个名为 curl 的命令行工具,它可以发出这样的 PUT 请求表单。我真的不想用我的示例应用程序尝试这个,我的问题只是,我是否忽略了某些东西或者可能是恶意 PUT 请求,例如“put /users/17?name='new_name'”?

如果有人会回答我的问题,请提前感谢您!

4

1 回答 1

2

是的,它们可以通过 PUT 进行更改,但通常这就是您想要的。您仍然应该检查当前用户是否有权在用户上设置这些字段。

管理员标志等是特殊情况,因为您希望能够明确设置它们,而不是批量分配。您不希望用户能够将自己设置为管理员,但让用户更改自己的电子邮件地址或姓名或其他任何应该没问题的东西。

于 2012-05-18T23:39:07.267 回答