Webアプリがセッション固定に対して脆弱でないことを確認するために統合テストを作成しています。
認証ロジックで実際に起動していることを手動で確認し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
最後のアサートを除いて、すべてが機能します。クッキーは変更されません。
RSpec / Rails統合テストでreset_session
期待どおりに機能しない既知の問題はありますか?セッション固定が問題ではないことを確認するテストを作成するにはどうすればよいですか?