【发布时间】:2013-01-24 10:06:38
【问题描述】:
为了确保我的应用程序不会受到this exploit 的攻击,我试图在 RSpec 中创建一个控制器测试来覆盖它。为了做到这一点,我需要能够发布原始 JSON,但我似乎还没有找到一种方法来做到这一点。在进行一些研究时,我确定至少曾经有一种方法可以使用 RAW_POST_DATA 标头,但这似乎不再起作用了:
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
当我查看参数哈希时,根本没有设置令牌,它只包含{ "controller" => "user", "action" => "reset_password" }。在尝试使用 XML 时,甚至在尝试仅使用常规发布数据时,我得到了相同的结果,在所有情况下,它似乎都没有设置它。
我知道最近 Rails 的漏洞导致参数的散列方式发生了变化,但是还有办法通过 RSpec 发布原始数据吗?我可以以某种方式直接使用Rack::Test::Methods吗?
【问题讨论】:
-
从 Rails 4.2.6 开始,在 RSpec 控制器规范中设置
request.env["RAW_POST_DATA"]对我有用。
标签: ruby-on-rails json ruby-on-rails-3.2 rspec2 rspec-rails