2016-09-25 41 views
0

我的Rails應用程序經常收到來自黑客掃描漏洞的僞造流量,點擊URLs如/vb/showthread.php%3C/a。這些在我們的日誌中顯示爲噪音,我想過濾它們或以某種方式處理這些(例如警告某人掃描嘗試)。是否存在阻止被黑網址請求的導軌或機架寶石?

是否有Rails或Rack Gem已經這樣做,或者在其他框架中有類似的庫可以做同樣的事情嗎?

+1

在10k代表你應該知道比問一個外部工具更好。 – max

+0

夠公平......我從來沒有問過這樣的問題。投票結束。 –

+0

@max你對這個問題是正確的,但是對我進行懲罰並不是一種非常友好的方式來提醒某些人有關規則。這是一種讓人們說SO社區不友善的評論。 –

回答

0

rack-attack中間件寶石足夠一般基於請求的任何屬性來阻止請求,並提供其他高級,以確保到config塊內部應用程序的配置文件中註冊的中間件像用於處理惡意流量的功能,例如請求限制,阻止列表和請求日誌記錄。

0

我不確定這是否真的回答你的問題,我認爲自定義過濾器會更好,而不是一般的寶石。

我已經在我的applicaton_controller上添加了一個過濾器來處理奇怪的請求,然後您可以提醒並執行您想要的操作。

class ApplicationController < .... 
    before_action :filter_hacks #first filter 

private 
    def filter_hacks 
    if request.format.to_s == 'php' 
     #do something: email, save report, anything 
     head(:ok) and return false 
    elsif #add other filters 

    end 
    end 

我相信它可以改進,但是你完全控制了你想要阻止什麼,當發生這種情況時該怎麼做。

0

這是一個很好的中間件用例。您可以存儲已知錯誤路由的列表,並使用您希望攔截的任何邏輯,並在將請求傳遞到您的應用之前處理該請求。我會詳細閱讀如何在Rails guides中使用Rack中間件。

但它可能與類似這樣的東西來完成:

class FilterBadRequest 
    BAD_PATHS = [ 
    "/vb/showthread.php%3C/a" 
    ] 

    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    req = Rack::Request.new(env) 

    bad_request = BAD_PATHS.find { |bad_path| req.fullpath ~= bad_path } 

    if bad_request 
     raise ActionController::BadRequest 
    else 
     @app.call(env) 
    end 
    end 
end 

這就提出了一個ActionController::BadRequest例外,但你可以重定向或做其他讓你的應用的上下文中的意義。你需要通過調用config.middleware.use FilterBadRequest