2010-03-17 137 views
1

我有一個Java Web服務和一個使用此服務的Java Web客戶端。其中一項功能是創建一個新的用戶帳戶。我的兩個問題是:安全地處理密碼

  1. 我將如何從客戶端安全地發送用戶密碼。
  2. 我將如何將用戶密碼安全地存儲在服務器上。

我怎樣才能做到這些?我知道基本理論背後的安全,安全算法等,但任何人都可以給我一些建議,我應該如何去編碼?任何人都可以指點我一些很好的(如果可能的話,不復雜)的例子,因爲我發現互聯網上的一些例子很扭曲?

非常感謝和問候, Krt_Malta

回答

3

通常,如果您擔心密碼從Web客戶端與服務的清晰傳輸,您將通過SSL運行服務。

在後端,我永遠不會將密碼存儲在明文中,在存儲之前對其進行散列處理。確保使用鹽。當用戶稍後登錄時,我散列它們提交的密碼,然後將散列值與之前存儲的散列值進行比較。如果它們匹配,那麼用戶已經認證。在我的情況下,除此之外還有更多的東西(記住我的特色等),但它是它的膽量。

我使用Apache Shiro框架來幫助解決大部分問題。它相當輕巧,不需要Web環境,但也可以與其他環境一起使用。它也與Spring及其他解決方案集成在一起,但同樣,這不是必需的。可能值得一試。

+0

不加密它,散列它。 – Gumbo 2010-03-17 20:47:50

+1

@Gumbo:是的,確切地說,這就是我的意思。哈希。我會更新我的答案。 – Tauren 2010-03-17 20:49:14

+0

感謝您的快速回答:)我在Tomcat 6.0上運行Web服務。如果我添加SSL(在這裏找到一篇好文章:http://mircwiki.rsna.org/index.php?title=Configuring_Tomcat_to_Support_SSL),密碼會被安全傳輸嗎?我應該改變客戶端的任何東西嗎? – 2010-03-17 21:12:15

2

約翰的規則:總是儘量避免編寫自己的安全軟件。很容易出錯,比如加密而不是哈希,不使用鹽等等。你不會找到許多安全專家來檢查你的代碼,但你可以期望有不少人看到了更受歡迎的開源系統。

首先,你可以使用OpenIDShibboleth避免給別人另一個系統,他們需要密碼 - 我會感謝你,如果我可以使用現有的帳戶!

如果答案是否定的,那麼對於密碼存儲,請嘗試免費的LDAP服務器,如OpenDSApache Directory Server

使用Spring Security或類似來管理登錄和記住我。 (有一個nice video,介紹彈簧安全。)

如果您希望您的系統通信密碼從客戶端到服務器,您將需要使用其他答案中提到的SSL(https)。