В спецификациях 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
Я тестирую свое приложение, а не промежуточное ПО. Средство промежуточного уровня на самом деле неразумное и требуется только для одной спецификации. Я не хочу, чтобы он был включен в приложении, и в нем нет ничего, чтобы проверить. – alesguzik
Итак, промежуточное программное обеспечение используется только для тестирования. Попробуйте включить функциональность вашего промежуточного программного обеспечения с заголовком запроса, например 'X-DisableXSSProtection: 1' – Leventix
Я могу добавить переменную класса и установить ее перед spec/unset after spec, чтобы условно включить функциональность промежуточного слоя. Но я не хочу, чтобы дополнительное промежуточное ПО было загружено _ для всех спецификаций. – alesguzik