2010-11-05 57 views
1

因此,我正在爲我的node.js Web框架編寫用戶/身份驗證系統。用戶系統的邊緣情況

從可用性或安全角度來看,我應該關注哪些邊緣案例?

+1

什麼是您的操作參數(因此邊緣情況?)這個問題非常模糊。你能提供一些關於你正在開發的系統的更多信息嗎?例如。你爲什麼從頭開始開發? – davmac 2010-11-05 02:08:59

回答

7

密碼必須在數據庫中使用單向散列算法進行散列處理。這使您不必知道他們的密碼。選擇正確的算法很重要。由於多個漏洞,MD5被認爲是不安全的。 SHA1還沒有被證明是不安全的,因爲MD5具有這種不安全性,但它被認爲在理論上很弱。最好轉換爲SHA2或SHA256。 SHA2由政府要求2010年

http://en.wikipedia.org/wiki/MD5

末密碼應鹽漬。這可以防止對密碼進行字典攻擊。通過組合一條隨機信息意味着攻擊者無法拿出一堆單詞並逐一嘗試,以查看系統中的哈希匹配情況。

http://en.wikipedia.org/wiki/Salt_(cryptography

重點加強有助於戰鬥力弱密碼,因爲弱密碼傷害你的系統的安全性。您可以使用散列算法迭代幾次1000次,以提高暴力破解密碼的複雜性。

http://en.wikipedia.org/wiki/Key_strengthening

確保用戶通過https提交他們的登錄web應用程序。否則,他們會在明確提交密碼。不要試圖讓Javascript變得聰明。只需使用https並完成它。

你必須權衡可用性與隱私。使用電子郵件地址而不是用戶名是非常好的,因爲它很容易記住,但如果你有社交網站,人們不會喜歡你發佈他們的電子郵件地址。有時候很高興接受用戶名或電子郵件地址。

您需要考慮的另一件事是您的用戶將如何保持登錄到您的系統。會話,cookies等。會話很簡單,但如果您的網站擁有數百萬用戶,則會變得非常昂貴。您可以使用memcache或Java中的衆多分佈式緩存中的一個來存儲它們。但是,其他替代方案正在使用HMAC。請記住,與單向哈希不同,HMAC具有必須在服務器上受保護的私鑰。如果您選擇使用HMAC + cookie來識別用戶,請採取措施以某種形式的對稱加密來保護私鑰。在HMAC不能使用過去的情況下也有一個死亡日期。 HMAC只應該在固定的時間段內有效。您的軟件必須執行該操作。不要依靠cookie超時爲你做這件事。

要考慮的其他事情是使用OpenID,因爲它確實可以幫助用戶訪問您的網站,而無需通過註冊過程。我有一個Android應用程序,我沒有先要求提供帳戶,但如果他們選擇使用某些功能,我會要求他們註冊。而且,通過不強制他們登錄,用戶的留存率更高。人員在註冊過程中下降。

確保您的應用程序中的方法在執行之前強制某人進行身份驗證。在調用方法之前,您需要有一種方法來強制所有方法調用通過應用程序的一部分,並且如果它們未通過身份驗證,則將它們重定向到登錄。嘗試並記住他們所去的頁面。

還有其他的,但我不完全確定這是你在找什麼。祝你好運,並且在安全方面與谷歌做一點研究是值得的。

+0

謝謝;我正在建立一個檢查清單,以便我可以驗證我的新系統並檢查一些舊系統。 – MathGladiator 2010-11-05 03:11:40

1

常見的邊緣情況:

  • 人們忘記了密碼。
  • 人們關閉Javascript,Flash,cookies ...任何技術,你可以想到依靠。
  • 安全性很難,你所要做的就是搞砸一次,毀掉你的月。 我的推薦:讓別人去做。如果你可以避免重新發明那個輪子,那就這樣做。