有没有更好的测试方法:管理员安全性

时间:2013-01-31 04:07:39

标签: ruby-on-rails railstutorial.org

我正在阅读Hartl的Rails教程。我接受9.6的第一次练习,他要求我测试用户admin属性是否无法访问。理由是在书的前面:

Listing 9.42之后,Hartl的Rails教程说

  

如果我们在U​​ser模型中省略了attr_accessible列表(或者愚蠢地添加:admin到列表中),恶意用户可以发送PUT请求,如下所示:

     

put /users/17?admin=1

教程中的相应练习(exercise 9.6.1)说

  

添加测试以验证无法访问用户管理属性

我已使用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

但我无法让它发挥作用。

所以我的问题是:

  1. 我的想法可能吗?直接测试潜在的黑客可能会从命令行做什么更好?这不是Capybara的想法,测试用户行为吗?

  2. 如果可能,测试质量分配和测试PUT操作之间是否存在差异?

  3. 如果不可能,为什么?是不是没有必要,或者我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:1)

我想我会和你争辩说你的测试实际上更好。有人会说,给定的答案是测试Rails功能,这实际上不是你的工作。但是,我确实认为在几个不同的方向上进行测试通常很有用。

我在学校时代的印象是,除了做GET之外,不可能通过URI发送数据。快速搜索stackoverflow并未导致任何确认。但是,维基百科文章似乎暗示了它:

http://en.wikipedia.org/wiki/POST_%28HTTP%2

我认为正确的代码行是

put user_path(user), {user: {admin: 1}, id: user.id}

我希望有所帮助。