2012-09-02 35 views
4

我正在使用登錄失敗的身份驗證系統。
如果用戶登錄失敗,數據庫中的嘗試次數會增加,如果達到了定義的限制,PHP會將會話captcha變量設置爲true。
因此,當用戶(或垃圾郵件機器人)再次獲得登錄頁面,驗證碼的形式表示感謝會話變量多次登錄失敗後啓用驗證碼 - 如何實現?

但是,由於垃圾郵件的機器人可能最終刪除會話cookie,然後重試,這可能是無效的。

我應該使用數據庫解決方案嗎?你將如何實現這個(有或沒有數據庫)?

+0

您可以使用IP地址並在數據庫中跟蹤特定IP地址的嘗試次數。 –

回答

5

垃圾郵件機器人可以很容易地解決會話限制,所以它必須在數據庫中完成才能生效。垃圾郵件機器人也可以在每次請求時更改其IP地址,但這很難實現。

您必須在用戶表中將登錄嘗試字段放在0處開始,當他們獲取密碼錯誤時增加此值,並在成功登錄時將其重置爲0。當有人試圖以登錄嘗試> 5的用戶身份登錄時,您會將他們帶到另一個帶有驗證碼的頁面,他們必須正確輸入(即使密碼錯誤)。

+1

除此之外,我還將添加IP跟蹤,以便如果有人試圖猜測用戶名,則即使他們在不同的嘗試中使用不同的用戶名,也需要輸入驗證碼。 –

+1

這種方法的一個問題是,如果實施得很糟糕,只要你願意,你可以非常有效地阻止任何你喜歡的用戶...... –

+1

@ Cyber​​-GuardEnterprise你不會阻止他們,你只是使用戶必須輸入一個capatcha代碼,而不是太多的用戶。您可以添加一個captchaExpires時間戳字段到表中。 – Timm

0

我只記錄用戶的會話變量,然後計算表單提交IP地址的次數。

0

從我的角度來看,如果他/她嘗試在PHP頁面上登錄,只要輸入用戶名,然後嘗試將用戶名保存在Login_attempts表中並且其IP地址也是如此。增加失敗的嘗試列並檢查它是否大於你的閥值5,如果失敗,則向其添加驗證碼並且同時檢查IP不會隨着每次嘗試以某個時間間隔改變,比如說1分鐘如果IP地址失敗,則IP地址應保持不變,然後登錄嘗試失敗。

爲了最佳使用NOSQL or memcache從數據庫中檢索快速數據。

相關問題