【发布时间】:2015-03-22 11:02:03
【问题描述】:
我正在阅读 Michael Hartl 的 Rails 教程书,在 Strong Parameters 部分它说
恶意用户可以如下发送 PATCH 请求:
补丁/users/17?admin=1
此请求将使用户 17 成为管理员,这将是一个潜在的严重安全漏洞。
然后我决定自己做一个“恶意用户”,以便更好地理解它。
所以我将 :admin 添加到用户控制器的允许属性列表中,并在 Linux 中使用 curl 发送 PUT/PATCH 请求,并在控制台中查看 admin 属性是否真的通过发送恶意请求而得到更新。
curl -X PUT http://localhost:3000/users/17?admin=1
首先它抱怨“无法验证CSRF令牌真实性”,然后我注释掉了
# protect_from_forgery with: :exception
在应用程序控制器中,还消除了一些 before_actions 只是试图让它工作,但我卡在它抱怨的地方
ActionController::ParameterMissing (param is missing or the value is empty: user):
app/controllers/users_controller.rb:49:in `user_params'
app/controllers/users_controller.rb:37:in `update'
然后我意识到我可能必须将用户参数作为参数哈希的哈希传递才能使其工作。如何在 curl 或 Postman(Chrome REST 客户端)中实现这一点?
【问题讨论】:
标签: ruby-on-rails ruby curl strong-parameters postman