Rieles / RSpec: reset_session no cambiar Set-Cookie cabecera HTTP valor durante las pruebas de integración

StackOverflow https://stackoverflow.com/questions/4764126

Pregunta

Estoy escribiendo una prueba de integración para asegurarse de que mi aplicación web no es vulnerable a la fijación de sesión.

He verificado manualmente que es en realidad reset_session disparo en la lógica de autenticación, y, además, que la cookie en efecto, cambiar al iniciar sesión con mi navegador web (así, yo no soy vulnerable a la fijación de sesión ya no), pero puedo 't conseguir mi prueba de integración con éxito a RSpec verificar esto.

Aquí está mi prueba de integración 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

Todo funciona excepto para la última aserción. La cookie no cambia.

¿Hay problemas conocidos con RSpec / carriles pruebas de integración, donde reset_session no funciona como se espera? ¿Qué puedo hacer yo para escribir una prueba que verifica la fijación de sesión no es un problema?

¿Fue útil?

Solución

Así que, finalmente, no terminan calcular esto.

Yo estaba tratando de editar la cabecera de respuesta directa a las cookies de prueba, pero supongo que eso no es la forma bendita.

En las pruebas de integración con los carriles 2.x todos modos, hay un hash cookies que se pueden utilizar. Esto es lo que la prueba terminó pareciéndose a:

  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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top