[英]How to add/remove rack middleware while server is running?
在水豚的規格中,我想測試缺少XSS漏洞。 我們使用帶有鉻的selenium-webdriver來運行瀏覽器規范,但默認情況下chrome具有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
它被忽略)。
那么,如何在服務器運行時添加/刪除中間件?
編輯:中間件只是以下內容:
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
當您正在測試Rack::DisableXssProtection
本身時,將它作為gem提取是有意義的,並使用虛擬Rails應用程序 Rack::DisableXssProtection
測試它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.