我正在阅读 Hartl 的 Rails 教程。我已经完成了 9.6 的第一个练习,他要求我测试 Useradmin
属性是否不可访问。本书前面的理由是:
在清单 9.42之后,Hartl 的 Rails 教程说
如果我们在 User 模型中省略了 attr_accessible 列表(或者愚蠢地将 :admin 添加到列表中),恶意用户可以发送 PUT 请求,如下所示:
put /users/17?admin=1
教程中的相应练习(练习 9.6.1 )说
添加测试以验证 User admin 属性不可访问
我已经使用以下代码完成了该测试user_spec.rb
:
expect do
@user.update_attributes(:admin => true)
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
但我使用 stackoverflow 来进行测试。 这是我最初的想法(在user_pages_spec.rb
):
expect do
put user_path(user) + "?admin=1"
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error) # or some other error
但我无法让它工作。
所以我的问题是:
我的想法可行吗?直接测试潜在黑客可能从命令行执行的操作不是更好吗?这不就是 Capybara 的想法,测试用户行为吗?
如果可能,测试质量分配和测试 PUT 动作之间是否有区别?
如果不可能,为什么? 只是没有必要还是我在这里遗漏了什么?