我試圖把一些安全登錄阻止用戶訪問後,3次失敗的嘗試登錄。 例如,如果特定用戶嘗試使用錯誤的用戶名或密碼登錄3次,我會在10分鐘後顯示用戶需要重試的對話框或消息(作爲示例)
比10分鐘後,用戶可以使用正確的用戶名和密碼重新登錄。
我該怎麼做?
我試圖把一些安全登錄阻止用戶訪問後,3次失敗的嘗試登錄。 例如,如果特定用戶嘗試使用錯誤的用戶名或密碼登錄3次,我會在10分鐘後顯示用戶需要重試的對話框或消息(作爲示例)
比10分鐘後,用戶可以使用正確的用戶名和密碼重新登錄。
我該怎麼做?
您可以使用$_SESSION
var在嘗試時間內保存嘗試次數。只有當用戶仍然具有相同的會話時(例如,不關閉瀏覽器),這纔會起作用。如果你想保存它,請使用cookie。如果您不希望用戶能夠避免這種情況,請使用IP的數據庫值,但如果使用NAT或其他方法,則會出現問題。 3次嘗試失敗後,您可能想要阻止一個IP $_SESSION
var
最簡單的方法是使用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。
在我的opnion中,Cookie或Session也可以解決您的問題,但在我看來,這些方法並不完美,特別是如果您專注於安全。如果用戶清除cookie,會發生什麼情況?
嗨Phat H. VU,正如我上面所說的,他可以存儲一些失敗登錄和上次登錄到db,然後每次用戶登錄時都檢查它。 – redwind
是的,謝謝你的評論。在這種情況下,應該考慮性能。我不知道哪個登錄頁面被應用的項目範圍。如果它不大,我們也可以使用Session或Cookie。 –
你嘗試了什麼? –
嘗試登錄他們的日誌,檢查日誌以確定他們是否可以再次嘗試 – 2012-12-26 04:00:08
您可以通過cookie或會話來做到這一點..只是存儲狀態和遞增每個失敗的登錄..如果達到3塊..login 10分鐘或更好的選項是要求填寫captcha ....就像Gmail和其他的 –