2012-12-26 67 views
-2

可能重複:
Limiting user login attempts in PHP如何阻斷後3失敗的登錄登錄幾分鐘

我試圖把一些安全登錄阻止用戶訪問後,3次失敗的嘗試登錄。 例如,如果特定用戶嘗試使用錯誤的用戶名或密碼登錄3次,我會在10分鐘後顯示用戶需要重試的對話框或消息(作爲示例)

比10分鐘後,用戶可以使用正確的用戶名和密碼重新登錄。

我該怎麼做?

+0

你嘗試了什麼? –

+0

嘗試登錄他們的日誌,檢查日誌以確定他們是否可以再次嘗試 – 2012-12-26 04:00:08

+0

您可以通過cookie或會話來做到這一點..只是存儲狀態和遞增每個失敗的登錄..如果達到3塊..login 10分鐘或更好的選項是要求填寫captcha ....就像Gmail和其他的 –

回答

0

您可以使用$_SESSION var在嘗試時間內保存嘗試次數。只有當用戶仍然具有相同的會話時(例如,不關閉瀏覽器),這纔會起作用。如果你想保存它,請使用cookie。如果您不希望用戶能夠避免這種情況,請使用IP的數據庫值,但如果使用NAT或其他方法,則會出現問題。 3次嘗試失敗後,您可能想要阻止一個IP $_SESSION var

1

最簡單的方法是使用SESSION存儲失敗登錄次數,對於每次用戶登錄使用錯誤的用戶名或密碼,增加您的計數。它像:

if(isset($_SESSION['num_login_fail'])) 
{ 
    if($_SESSION['num_login_fail'] == 3) 
    { 
    if(time() - $_SESSION['last_login_time'] < 10*60*60) 
     { 
     // alert to user wait for 10 minutes afer 
      return; 
     } 
     else 
     { 
     //after 10 minutes 
     $_SESSION['num_login_fail'] = 0; 
     } 
    }  
} 

$sucess = doLogin() // your check login function 
if($success) 
{ 
    $_SESSION['num_login_fail'] = 0; 
    //your code here 
} 
else 
{ 
$_SESSION['num_login_fail'] ++; 
$_SESSION['last_login_time'] = time(); 
} 

但是,用戶可以通過依次繞過它關閉瀏覽器,然後重新打開,所有用戶的會話西港島線是空的。爲了更完美,你可以在你的數據庫中存儲num_login_fail和last_login_time。

0

在我的opnion中,Cookie或Session也可以解決您的問題,但在我看來,這些方法並不完美,特別是如果您專注於安全。如果用戶清除cookie,會發生什麼情況?

+0

嗨Phat H. VU,正如我上面所說的,他可以存儲一些失敗登錄和上次登錄到db,然後每次用戶登錄時都檢查它。 – redwind

+1

是的,謝謝你的評論。在這種情況下,應該考慮性能。我不知道哪個登錄頁面被應用的項目範圍。如果它不大,我們也可以使用Session或Cookie。 –