簡體   English   中英

如何在服務器運行時添加/刪除機架中間件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM