我想關閉在我們的網站上運行屏幕刮取器並挖掘數據的人員。或者至少讓他們放慢時間。如何防止Rails中的某個IP訪問?
我的想法是每個IP地址寫入到內存中的對象和計數,他們每分鐘多少個請求製作,然後把它們放在一些「無法訪問」列表中,如果它們超過了一些數字,我設置。
我只是在尋找這是否是一個Rails應用程序完善辦法的一些社區確認。謝謝你盡你所能的幫助。
我想關閉在我們的網站上運行屏幕刮取器並挖掘數據的人員。或者至少讓他們放慢時間。如何防止Rails中的某個IP訪問?
我的想法是每個IP地址寫入到內存中的對象和計數,他們每分鐘多少個請求製作,然後把它們放在一些「無法訪問」列表中,如果它們超過了一些數字,我設置。
我只是在尋找這是否是一個Rails應用程序完善辦法的一些社區確認。謝謝你盡你所能的幫助。
我不知道你們,我想出了一個相當不錯的方式,在應用程序做到這一點。無論如何,我只想在一個應用程序中懲罰不良行爲。我落得這樣做是:
def log_ip
# Initialize
if IPLOG.include?(request.ip)
IPLOG[request.ip][:count]+=1
else
IPLOG[request.ip] = {:time => Time.now, :count => 1}
end
# Reset the time if necessary
IPLOG[request.ip][:time] = Time.now if IPLOG[request.ip][:time] < 1.minute.ago
if IPLOG[request.ip][:count] > REQUESTS_PER_MINUTE_UNTIL_BLACKLIST
Blacklist.create(:ip_address => request.ip, :count => IPLOG[request.ip][:count])
end
if Blacklist.where(:ip_address => request.ip).first
IPLOG.delete(request.ip)
redirect_to blocked_path
end
end
我敢肯定,我可以收緊這件事,所以我沒有做DB命中每一次,但它似乎是相當不錯的了。它昨晚抓住了GoogleBot。另外,如果一羣人通過一個已知的代理進入,那麼就有機會將IP地址列入白名單。
我不知道這是爲了保護您的網站從這些IP在應用層是一個好主意。我會親自調查是否可以在網絡級別執行此操作,例如在防火牆/路由器中。如果您有Cisco路由器,請查看「速率限制」命令。
1使用任意一種網絡配置或至少web服務器配置(nginx的/阿帕奇),而不是用於阻止用戶關閉應用的變化。我認爲web服務器配置只會允許一個完整的塊,所以去網絡設置。 – Jeremy 2010-11-25 22:13:59