2012-07-04 16 views
1

我想知道如何限制全球每秒訪問次數 - 對於所有的IP,而不是每個IP - 來防止僵屍網絡或類似的密碼破解。這將有效地將密碼破解攻擊轉變爲DDOS攻擊。每秒限制訪問整個Web腳本:好主意還是不好?如何實施?

請注意,此腳本的預期流量非常低(每天訪問1次)。

例如

//pseudocode... 
while (now() - last_access < 1 second) 
    sleep(0.3 seconds) 

last_access = now() 

兩個問題

  1. 這是個好主意嗎?
  2. 如何在PHP中做到這一點? (因爲我沒有在Apache的配置控制)

編輯:如果n用戶試圖同時訪問該網站,我很高興爲每一個等待n秒。他們只需要加載一個頁面。

+1

該網站每天只有一個訪問? –

+0

它實際上是一個許可證服務器。好吧,它可能比高峯負荷高出很多,但1 /天大概是平均值。 –

回答

2

那麼,首先,你需要弄清楚你的門檻。什麼會算作更高的負載,什麼可以算作DDOS攻擊?

其次,您需要將last_access變量保存在更永久的地方,如數據庫。

但是,是的,你要找什麼是可能的,建議如果你的網站是在頻繁的攻擊。

相反睡眠(這是在攻擊的情況下無用)的,只是顯示了通用

<h1>The server is currently experiencing extreme load. Please try again later</h1> 

你的門檻應該是更喜歡在最後幾秒鐘的5個用戶(在這種情況下你需要記錄所有訪問的最後幾秒鐘結束了,算一算自己。


更好的辦法是強制用戶註冊,並使用驗證環節註冊時。

1

有更好的方法來防止機器人。首先,迫使用戶無法快速使用您的網站不是一個好主意。相反,使用相同種類的方法,您可以測試一下知道IP嘗試登錄多長時間。例如,如果它在1秒以內,則不要處理輸入,只輸出「慢下來!」。更好的方法是使用captha類似的方法,就像一個簡單的數學問題。

+2

簡單的數學問題不適用於稍高質量的機器人。你需要使用一個完整的驗證碼,如果你需要訪問你網站上的每一個頁面,這是非常煩人的。 –

+0

那麼,他確實說每天有大約1次訪問,所以他可能不需要一個複雜的系統。 –

+0

這不是我擔心的單一IP地址 - 我已經檢查他們最近沒有訪問過它。威脅是分佈式攻擊 - 多個IP。 –

2

如果你絕對相信,這個網站只參觀一天一次合法的,你可以做,當然如此。

你可以用PHP寫一個txt文件並存儲最近訪問那裏 - 也就是說,如果你沒有訪問數據庫或存儲信息的其他一些手段。

至於你提到自己,這可能會導致您的網站被永久下來,即使是非常小的攻擊(每秒3-4次點擊也很難被稱爲DOS攻擊)就足以給你鎖定。

+0

嗯。好點子。我想如果每秒有3-4次點擊只能持續幾秒鐘。總共說50個點擊。然後(如果我正確理解自己的代碼),每個客戶端必須等待0到50秒,平均等待25秒。你同意嗎? –

1

想一想。

這基本上是一個「如何做DDoS-我自己」的解釋。

如果您設置了一個限制並阻止從該點訪問,那麼您只是簡單地崩潰了自己的站點 - 無論如何,這是DDoS攻擊的最終目標。而且,設置這樣的人爲限制會比任何DDoS更快地崩潰你的站點(因爲腳本在達到真正的「硬限制」之前需要激活)。

DDoS緩解處理一個問題:「如何在DDoS攻擊期間保持運行?」關閉自己並不是一個答案。

這就像治療氰化物頭痛 - 它將「技術上」工作,但我不稱之爲治癒。

+1

我不是想減輕DDoS,我不是爲了防禦這種情況。我試圖抵禦蠻力用戶名/密碼破解,我很樂意將這種嘗試轉化爲DDoS,因爲後者的後果並不那麼嚴重。 –

+0

好吧,我正在處理這個問題的DDoS方面,因爲我認爲(這是這種情況),這是一個更嚴重的問題,難以解決。只是對於強力密碼攻擊,我會建議使用CAPTCHA或者可能只是限制嘗試次數或做一個組合(5次嘗試>> CAPTCHA)。 –

相關問題