2011-05-12 44 views
12

我正在編輯:移動網絡應用程序它顯示一些敏感信息,並需要一個登錄名將會員用戶名和密碼存儲在HTML5會話中。用戶名和密碼當前以未加密狀態存儲,原因是我們需要在每個頁面加載時使用此用戶名和密碼來訪問客戶端遠程Web服務。HTML5客戶端數據加密 - 我有什麼選擇?

編輯:安全審查後,我們的客戶提出了以下關注:

「有是會話存儲的信息會存儲在磁盤上(例如,在瀏覽器崩潰)的潛在爲此沒有任何敏感信息應在會話存儲器中以未加密方式存儲,因爲會話超時被實現,用戶ID和會話令牌可以被存儲,但不建議存儲密碼/ PIN。

加密和解密存儲在客戶端的敏感數據的最佳/最安全的方法是什麼?

謝謝!

+0

安全反對什麼?客戶端攻擊?運送中的攻擊?答案會因此而大不相同。 – Piskvor 2011-05-12 09:42:25

+0

@ Piskovar-客戶安全團隊的一名成員提出了一個特別的問題:「Session Storage信息可能存儲在磁盤上(例如,瀏覽器崩潰)。因此,不應該有敏感信息在會話存儲器中以未加密方式存儲,因爲會話超時已實現,所以可以存儲用戶ID和會話令牌,但不建議存儲密碼/ PIN。 – TGuimond 2011-05-12 09:45:19

+1

啊哈,謝謝你的澄清。 – Piskvor 2011-05-12 09:46:20

回答

2

看到這個HTML5 Web DB Security

客戶端加密庫 還不夠成熟或測試不夠好

...但它已經在一年前,這樣可能是假的已經

10

嗨,而不是存儲用戶名和密碼,你不能創建某種類型的「會話」與遠程服務器,而是傳輸身份驗證令牌?

在客戶端的任何位置存儲用戶名和密碼都會讓我感到不適。

也許正在尋找安全地存儲用戶名/密碼的方法,尋找消除所有需要的方法。

然而,當然我不知道整個背景是在說這個......我猜測有一個很好的理由需要存儲用戶名/密碼。

+1

我們需要每個頁面加載的用戶名/密碼的原因是,我們必須使用它來從每個頁面加載的遠程Web服務加載數據。我們的客戶不願意在這個要求上做出決定:( – TGuimond 2011-05-12 09:59:57

+0

@TGuimond一個棘手的問題,Web服務是否有任何其他身份驗證方法可用?您可以使用Windows身份驗證進行身份驗證嗎? – 2011-05-12 10:41:49

3

Firefox工程師David Dahl有一個原型的Firefox擴展,domcryptrepository on github),它提供了對JavaScript的NSS(網絡安全服務)API的訪問。由於Chrome也使用NSS,因此提供相同的API可能也很簡單。

他的pushing Mozilla爲了最終融入到Firefox中而進一步發展;我們會看到會發生什麼。

+0

@David Dahl:我完全忘了提及它一個移動瀏覽器的網絡應用程序,所以我們僅限於智能手機瀏覽器。 – TGuimond 2011-05-12 10:02:14

2

最近我正在研究這個話題。我想現在我們確實有一些經過驗證的JS加密庫,參見herehere

現在問題是在哪裏存儲密鑰。將它存儲在客戶端將與存儲沒有加密的數據相同。並且讓用戶始終輸入密鑰會破壞目的。

也許你可以讓你的服務器在你創建一個新的會話時生成一個新的密鑰。 (請確保在提出此請求時使用HTTPS)。如果會話過期,用戶必須再次輸入用戶名/密碼,並使用新令牌加密。要解密密鑰,您必須向服務器發送(安全)請求(傳入會話ID)以請求密鑰,然後可以使用該密鑰來解密用戶名和密碼。

現在,這仍然留下了常見的漏洞,例如交叉端腳本或會話劫持,但至少用戶密碼不會以明文形式存儲在客戶端。

您認爲如何?


8

對於任何磕磕絆絆就這個問題,斯坦福大學在http://crypto.stanford.edu/sjcl/有一個加密項目上。我自己並沒有在製作中使用它,但我正在忙着研究它,到目前爲止它看起來很有前途。希望這可以幫助某人。

0

我不得不說,如果你創建一個會話數據1不是, - 存儲在服務器而不是客戶端,因此沒有人看到會話數據或至少它應該通過asp或php等方式完成所以應用程序需要互聯網,並從Web服務器檢索信息,而不是將其存儲在客戶端。 2如果這樣處理客戶端就像處理流式傳輸視頻或圖像一樣,或者您必須在客戶端創建一些文件,將密鑰存儲在客戶端移動設備上是唯一的方法。因此,要麼使用短ttl解密數據的密鑰,通過某種形式的身份驗證或證書給出的密鑰,或者從主辦公室安裝的密鑰,並在設備鬆動時加密設備。我沒有找到並加密我喜歡爲你建議的功能。

0

我工作在application面臨同樣的問題。 安全性對於此應用程序非常重要,因爲它允許用戶構建個人樹(或嵌套列表)並將其存儲在雲中。

我的解決方案是使用由服務器爲每個用戶生成的另一個密碼來加密存儲在客戶端的密碼。

0

存儲敏感的用戶憑據真的不是一個好設計。相反,使用sprint框架從服務器生成一個經過身份驗證的令牌。然後可以使用Web數據庫安全模塊將其存儲在本地存儲中。