2011-01-27 37 views
12

我已經設置我的數據庫來記錄每個失敗的登錄嘗試。我以爲我會用0.05秒或更多的時間乘以失敗的嘗試次數。例如:增加登錄時間延遲停止bruteforcing,好主意?

  time_nanosleep(0, (50000000 * $failed_attempts)); 

更多黑客用來猜測密碼的嘗試,需要更多的時間來檢查每次。在檢查100個passords之後,他必須在每次嘗試之間等待5秒。

這是停止bruteforcing的好方法嗎?我通過IP識別用戶。所以我猜你可以通過使用多個代理服務器或其他東西來強制應用程序,但除此之外,我認爲這是一個好主意。你們有什麼感想?

回答

9

什麼是這樣的:

time_nanosleep(0, (10000000000 * (log($failed_attempts)^10))); 

這會給你一個指數增長企圖窗口。

1

它不應該是你對bruteforcing的整個策略,但它是該戰略的一個很好的組成部分,IMO幾乎總是會被使用。

+0

擁有隨機延遲而不是固定延遲也是一件好事。 – akond 2011-01-27 17:10:06

+0

我沒有看到太多的好處 - 無論如何,平均延遲會升高,這種情況將會變得很明顯,但是如果它吸引你的話,我也不會看到任何傷害。 – chaos 2011-01-27 17:11:22

+0

@akond爲什麼有一個隨機延遲是好事? – ChrisW 2011-01-27 17:12:13

6

我看到的第一個問題是,你正在處理一個不關心響應之間是否存在延遲的bot。除非你做了一些限制,否則你會使用系統資源並可能造成很長時間的延遲。 5次失敗嘗試後禁止IP。如果你擔心禁止真正的用戶,這可能是一個臨時禁令。

1

您可能希望按指數增長而不是僅僅線性增加;或使其固定,例如在5次失敗嘗試後否認一個小時。

4

限制IP重試並使用驗證碼。不要讓你的服務器超載,請考慮KISS。

0

我知道我已經看到這個地方完成了,但我忘記了在哪裏。我看到的例子是,每次嘗試失敗都會延長時間。如果開始時間爲.1秒,則可能錯誤輸入密碼一次或兩次的普通用戶延遲0.4秒。他們甚至不會注意到。但是有人試圖蠻橫攻擊他很快就會在分鐘或幾小時內延遲。

我想對於一個網絡應用程序,可能存在對您自己發起拒絕服務攻擊的問題。這完全取決於系統如何處理時間延遲。

0

機器人並不真正關心你的延遲,無論是指數還是對數等等。通過輪詢可以克服任何延遲。所以,不要認爲延遲。考慮限制嘗試次數並使用Google reCAPTCHA。它使用公私鑰加密。消除大多數機器人並且很難破解。

4

您應該儘量不要使用Sleep(),因爲它使用cpu週期,並且如果您從10,000個ip地址獲得蠻力攻擊,則會fork 10,000個sleep()子進程或線程,這會導致服務器上的負載。

請嘗試使用PHP阻止IP地址。像這樣的東西。

function block_ip($ip) { 
     $deny = array("$ip"); 
       if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) { 
        header("HTTP/1.1 403 Forbidden"); 
        exit(); 
       } 
      }