2013-11-06 3 views
3

В спецификациях capybara я хочу проверить отсутствие уязвимости XSS. Мы используем селен-webdriver с хромом для запуска спецификаций браузера, но хром по умолчанию имеет XSS-защиту, которую можно отключить, установив заголовок X-XSS-Protection на 0. Я написал промежуточное ПО для установки этого заголовка, и он работает, если включен в config/environments/test.rb. Поскольку этот заголовок требуется только в этой спецификации, я не хочу, чтобы он был включен для всех спецификаций.Как добавить/удалить промежуточное ПО стойки во время работы сервера?

Я попробовал следующее:

describe 'without xss protection' do 
    before :all do 
    Rails.configuration.middleware.use Rack::DisableXssProtection 
    end 

    after :all do 
    Rails.configuration.middleware.delete Rack::DisableXssProtection 
    end 

    it 'should not have xss', :needs_browser do 
    visit new_order_path 
    page.driver.execute_script <<-EOF 
     $("<input/>", { 
     id: "new_input", 
     name: "bad_field", 
     type: "radio", 
     value: "<script>alert('fail');</script>" 
     }).appendTo("#some_form"); 
    EOF 
    find('#new_input').click 
    click_on 'submit' 
    end 
end 

Если я останавливаюсь в любом месте внутри этой спецификации, я могу видеть его в Rails.configuration.middleware, но это не называется (заголовок не установлен, и если я ставлю raise в этом промежуточном слое это игнорируются).

Итак, как я могу добавить/удалить промежуточное ПО во время работы сервера?

EDIT: промежуточное программное обеспечение только следующее:

module Rack 
    class DisableXssProtection 
    def initialize(app) 
     @app = app 
    end 
    def call(env) 
     status, headers, body = @app.call(env) 
     headers['X-XSS-Protection'] = '0' 
     [status, headers, body] 
    end 
    end 
end 

ответ

0

Как вы проверяете Rack::DisableXssProtection себя, было бы целесообразно, чтобы извлечь его, как драгоценный камень, и проверить его в изоляции с dummy Rails application.

+0

Я тестирую свое приложение, а не промежуточное ПО. Средство промежуточного уровня на самом деле неразумное и требуется только для одной спецификации. Я не хочу, чтобы он был включен в приложении, и в нем нет ничего, чтобы проверить. – alesguzik

+0

Итак, промежуточное программное обеспечение используется только для тестирования. Попробуйте включить функциональность вашего промежуточного программного обеспечения с заголовком запроса, например 'X-DisableXSSProtection: 1' – Leventix

+0

Я могу добавить переменную класса и установить ее перед spec/unset after spec, чтобы условно включить функциональность промежуточного слоя. Но я не хочу, чтобы дополнительное промежуточное ПО было загружено _ для всех спецификаций. – alesguzik

Смежные вопросы