45

私のアプリケーションがこのエクスプロイトに対して脆弱でないことを確認するために、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

params ハッシュを見ると、トークンはまったく設定されておらず、含まれているだけ{ "controller" => "user", "action" => "reset_password" }です。XML を使用しようとした場合、または通常の投稿データを使用しようとした場合でも同じ結果が得られますが、いずれの場合も期間を設定していないようです。

最近の Rails の脆弱性により、パラメーターがハッシュされる方法が変更されたことは知っていますが、RSpec を介して生データを投稿する方法はまだありますか? どういうわけか直接使用できますRack::Test::Methodsか?

4

7 に答える 7

81

私の知る限り、生の 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
于 2013-02-08T22:46:12.127 に答える