ruby-on-rails - 使用 Rails 3.2.11 和 RSpec 发布原始 JSON

为了确保我的应用程序不受 this exploit 的攻击,我正在尝试在 RSpec 中创建一个 Controller 测试来覆盖它。为了做到这一点,我需要能够发布原始 JSON,但我似乎还没有找到一种方法来做到这一点。在做一些研究时,我确定至少曾经有一种方法可以使用 RAW_POST_DATA header ,但这似乎不再起作用了:

it "should not be exploitable by using an integer token value" do
  request.env["CONTENT_TYPE"] = "application/json"
  request.env["RAW_POST_DATA"]  = { token: 0 }.to_json
  post :reset_password
end

当我查看 params 哈希时,根本没有设置 token ,它只包含 { "controller"=> "user", "action"=> "reset_password"}。在尝试使用 XML 时,甚至在尝试仅使用常规发布数据时,我得到了相同的结果,在所有情况下,它似乎都没有设置它。

我知道最近 Rails 的漏洞导致参数的散列方式发生了变化,但是还有办法通过 RSpec 发布原始数据吗?我可以以某种方式直接使用 Rack::Test::Methods 吗?

最佳答案

据我所知,在 Controller 规范中不再可能发送原始 POST 数据。但是,它可以在请求规范中很容易地完成:

describe "Example", :type => :request do
  params = { token: 0 }
  post "/user/reset_password", params.to_json, { 'CONTENT_TYPE' => 'application/json', 'ACCEPT' => 'application/json' }
  #=> params contains { "controller" => "user", "action" => "reset_password", "token" => 0 }
end

关于ruby-on-rails - 使用 Rails 3.2.11 和 RSpec 发布原始 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14775998/

相关文章:

django - 如何使用 Django REST 框架制作 POST 简单的 JSON? CSRF

javascript - 如何使用 meteor 进行 API 调用

java - 如何使用 getJSONArray 方法访问 json 对象的嵌套元素

android - 在android中创建json

php - 将 JSON 数据从 Javascript 发送到 PHP?

android - 改造 2 : Get JSON from Response body

wcf - 将 Entity Framework 对象序列化为 JSON

jquery - 如何使用jquery将项目添加到无序列表