Rails/rspec:reset_sesssion統合テスト中にセットクッキーHTTPヘッダー値を変更しない
-
16-10-2019 - |
質問
WebAppがセッション固定に対して脆弱でないことを確認するための統合テストを書いています。
私はそれを手動で検証しました reset_session
実際に認証ロジックを発射しており、さらに、WebブラウザーでログインするとCookieが実際に変更されます(したがって、セッション固定に対して脆弱ではありません)が、RSPEC統合テストを正常に取得することはできませんこれを確認します。
これが私のRSPEC統合テストです。
require 'spec_helper'
describe "security" do
self.use_transactional_fixtures = false
append_after(:each) do
ALL_MODELS.each &:delete_all
end
describe "session fixation" do
it "should change the cookie session id after logging in" do
u = test_user :active_user => true,
:username => "nobody@example.com",
:password => "asdfasdf"
u.save!
https!
get_via_redirect "/login"
assert_response :success
cookie = response.header["Set-Cookie"].split(";").select{|x| x.match(/_session/)}[0].split("=")[1].strip
post_via_redirect "/login", "user[email]" => "nobody@example.com",
"user[password]" => "asdfasdf",
"user[remember_me]" => "1"
assert_response :success
path.should eql("/dashboard")
cookie.should_not eql(response.header["Set-Cookie"].split(";").select{|x| x.match(/_session/)}[0].split("=")[1].strip)
end
end
end
すべてが機能します それ外 最後のアサートのために。 Cookieは変更されません。
RSPEC/Rails統合テストに関する既知の問題はありますか reset_session
期待どおりに機能しませんか?セッションの固定が問題ではないことを検証するテストを書くために何ができますか?
解決
だから私は最終的にこれを理解することになりました。
私は応答ヘッダーを直接編集してクッキーをテストしようとしていましたが、それは祝福された方法ではないと思います。
とにかくRails 2.xを使用した統合テストでは、使用できるCookiesハッシュがあります。これがテストのように見えたものです:
u = test_user :active_user => true,
:username => "nobody@example.com",
:password => "asdfasdf"
u.save!
https!
get_via_redirect "/login"
assert_response :success
cookie = cookies['_session']
cookie.should be_present
path.should == "/login"
post_via_redirect "/login", "user[email]" => "nobody@example.com",
"user[password]" => "asdfasdf",
"user[remember_me]" => "1"
assert_response :success
path.should eql("/?login_success=1")
new_cookie = cookies['_session']
new_cookie.should be_present
cookie.should_not eql(new_cookie)
所属していません StackOverflow