2009-10-27 33 views
3

我想建立一個登錄系統的Ruby on Rails的,就像這樣一個我應該限制嘗試登錄rails嗎?

http://visionmasterdesigns.com/tutorial-create-a-login-system-in-ruby-on-rails/

在安全性方面,我應該限制的嘗試,用戶可以有,如果他們得到他們的用戶名登錄錯誤?

此外,登錄的基本步驟似乎是:

  • 認證的用戶名和密碼,防止那些在數據庫
  • 如果真實的用戶名和密碼,過濾器之前創建一個會話變量
  • ,以便頁要求登錄被保護。

還有什麼我應該考慮的嗎?

回答

8

是限制每個ip(不是每個會話)的登錄嘗試次數會增加安全性。

你知道Rails已經有幾個認證系統嗎?沒有必要重新發明輪子。
這是一個不完整的列表。

如果你不希望使用任何,你可以把他們在做什麼的例子。

編輯2013
以上所提供的庫是不是最新的了,而且在新的應用程序使用他們,我不能推薦。看看devise

+3

「每個IP」在這裏是關鍵。沒有這些,你已經對用戶引入了一個微不足道的拒絕服務攻擊。 – 2009-10-27 16:55:47

+3

還有設計:http://github.com/plataformatec/devise/ – Mike 2009-10-27 17:43:04

+0

驗證鏈接是錯誤的。應該是http://github.com/binarylogic/authlogic – Jim 2009-10-27 21:01:22

0

另一個考慮因素應該是拒絕服務攻擊。將動態頁面的請求數量限制在合理的範圍內會使惡意用戶無法取下您的網站,因此難以執行。在幫助解決密碼破解問題的同時,這還有助於防止用戶以非預期的方式操作網站數據,這可能會造成安全風險(可能是因爲數據損壞)。

如果你決定使用這種方法,你應該嘗試找到一個很好的支持模塊來幫助你做到這一點(而不是自己動手)。

1

另一種方法是使用機架。您可以跟蹤IP在數據庫,memcached,redis,東京內閣等存儲登錄嘗試的一段時間內訪問登錄頁面的次數。然後拒絕用戶訪問該頁面,如果它們超過了一組定義的時間間隔的配額。

Damien建議Authlogic。 Authlogic是我最喜歡的Rails認證系統。它非常全面和適應性強。 Authlogic有很多現有的模塊,我相信你可以利用其中的一個模塊讓Authlogic爲你工作。

2

首先,限制每個IP的登錄頁面。在登錄頁面上使用invisible captcha system。然後,您應該爲每個IP設置登錄限制,但是您還應該將每個用戶的登錄限制作爲阻止僵屍網絡免遭來自多個IP的暴力破壞的最後手段。如果嘗試強制他們的密碼被發現,則發送電子郵件給用戶。如果有人嘗試使用一堆不同的IP地址,請勿發送大量重複的電子郵件。僵屍網絡可以做一些嚴重的垃圾郵件,否則,更糟糕的是,會在垃圾郵件文件夾中產生一條重要消息。請務必提及他們可能想更改密碼,和/或升級其實力。

如果您將IP登錄限制設置爲高限。很多地方使用三次罷工,你出去了。這是堅果和用戶不友好的。它應該至少有十個或更多的現實性,當你觸及它時,你應該得到一個基於時間的禁令,而不是「呼叫客戶支持」禁令。沒有人會在十次嘗試中暴力破解密碼。因此,我建議每IP登錄限制爲10,每用戶登錄限制爲1,000到10,000(足夠高以阻止拒絕服務攻擊,但低到僵屍網絡不太可能破解密碼) 。對於系統管理員/隨叫隨到的傳呼機,您應該有一些警告,即在您工作之前有一個僵屍網絡會在您達到該閾值之前觸發很長時間。 (保持所有用戶和個人用戶失敗的登錄次數,進行滾動平均,如果超過任一閾值都會發出警報。請記住,如果某人擁有足夠多的用戶列表,則至少有一個帳戶在整個帳戶用戶基數與攻擊一個帳戶的成功概率大致相同。)

在防火牆處阻止明顯的攻擊者。一段時間後禁用。一定要做到這一點,以便客戶支持可以解除某人的禁令,但要確保禁令與攻擊有關。你不應該解鎖一個試圖破解二十個不同用戶登錄的人。當然,這裏的判斷是因爲腳本小子與被僵屍網絡接管的非故障家庭成員和奶奶確實可以設法讓自己的IP被禁止。

如果你真的有時間去做所有這些,你將擁有一流的登錄表單。我懷疑你需要那麼多。