2013-05-11 40 views
0

我正在爲一個網站登錄腳本,我需要一些方向。我所關心的有關安全..一些登錄失敗嘗試的操作 - 驗證碼

有參與,登錄頁面和登錄類,而我管理的安全如下2個東西..

內的login.php形式有一個令牌,當用戶提交表單(目標「PHP_SELF」),我稱之爲類:

  • 驗證令牌
  • 檢查,如果用戶不阻止
  • 檢查,如果密碼是正確的bcrypt。
  • 如果登錄失敗,則將該用戶最後一次登錄的嘗試次數和日期時間存儲在分區中。如果第二次嘗試,我會在表單中放入recaptcha。驗證碼通過jquery/ajax驗證(出於可用性原因),並在提交後在類中再次驗證服務器端(以防某人強制ajax發帖)。
  • 如果第五次嘗試失敗,該帳戶被阻止10分鐘。

您是否看到任何安全弱點?

我發現了一個,不知道如何解決它。

如果失敗嘗試是「x」並且需要使用recaptcha,用戶可以單擊「登錄頁面」鏈接(不刷新),並且找到沒有使用recaptcha的表單(嘗試爲0)。我可以創建一個Session變量「嘗試「,但這一個可以強制以及阿賈克斯呼籲,對吧?

在此先感謝您的幫助

+0

你怎麼知道它是同一個用戶試圖再次登錄? – Aris 2013-05-11 19:38:32

+0

,因爲用戶使用郵件登錄並通過。我有一個數據庫中的表,我存儲的用戶名,嘗試和lastlogin ..當用戶提交表單,我檢查該表.. – buu 2013-05-12 00:13:20

回答

1

一個安全問題我看到的是,當一個機器人創建隨機電子郵件和密碼,並不斷進行登錄。由於電子郵件是不同的每一次,你不知道它的同'機器人',它會保持你的網絡服務器繁忙,並使其變慢。

要解決這個問題:

  1. 你總是可以有CAPTCHA
  2. 你可以得到主叫IP和基於IP的,沒有電子郵件執行規則。當這個IP嘗試幾次時,你可以在防火牆上阻止它。
+0

我實際上在xampp上工作,並不知道有關防火牆..但我會搜索一下, 謝謝! – buu 2013-05-13 04:28:26

+0

阻止IP由您的管理員完成。在編程方面,驗證碼將有助於這種情況。 – Aris 2013-05-13 05:03:11

+0

但我可以阻止基於IP的用戶登錄,檢查其對數據庫的嘗試..對吧? – buu 2013-05-13 14:26:04

1

用這樣的方案最大的問題是,你是阻止(或CAPTCHAing)的用戶而非IP地址。這開闢了一個脆弱性和不停止暴力破解:

  1. 蠻力機器人可以有兩種猜測每個帳戶沒有任何CAPTCHA或阻塞。所以機器人會在您的系統上的每個帳戶上嘗試「密碼」和「123456」,並且可能會有2%的時間成功。你想在每個賬戶得到兩次猜測之前就停下來。特別是如果你使用bcrypt,這在CPU方面非常昂貴。
  2. 惡意惡作劇可以鎖定任何他們知道電子郵件地址的用戶,只需每10分鐘嘗試以該用戶5次的身份登錄即可。

請注意,阻止IP地址帶有自己的一組誤報和漏報。合法的代理服務器和僵屍網絡意味着阻止IP地址可能會導致問題。它確實解決了90%的蠻力問題。

CAPTCHA還帶有它自己的一套假陽性和假陰性。我知道我無法閱讀大量的ReCAPTCHA圖像,並且我看到機器人攻擊我的系統比我更好地解決ReCAPTCHA。除了安慰劑對我的客戶有影響之外,我完全不用擔心CAPTCHA。

你說:

用戶可以點擊 「登錄頁面」 鏈接(不刷新),並發現沒有驗證碼的形式(如嘗試爲0)

這是爲什麼?如果嘗試計數存儲在數據庫中,爲什麼點擊該鏈接會改變嘗試計數?

嘗試次數是否有自動超時? 成功登錄是否重置?

如果你實現了這個功能,蠻力機器人甚至可能不會注意到基於會話的阻塞。會話基於Cookie,除非您的登錄表單需要會話中的某些內容,否則殭屍程序甚至不會在登錄後發送該Cookie。即使需要,bot也可以在不需要發送該cookie的情況下隨時獲取新的未阻止的會話cookie。

+0

在x登錄嘗試失敗(蠻力和惡意惡作劇)後阻止用戶問題的好處。 所以你認爲要走的路是阻止IP?使用下面的這個函數,並存儲返回將是一個更好的方法? http://stackoverflow.com/a/3358212/1736512 || 在「登錄頁面」上回答您的問題是因爲在用戶提交表單(用他的電子郵件)後,我會調用登錄進程類並檢索嘗試次數,順便說一下,這聽起來毫無意義。 – buu 2013-05-13 04:21:35