2012-04-25 190 views
7

在要存儲在localStorage用戶相關數據的事件(例如,由於多個用戶可以使用您的網站相同的瀏覽器),你怎麼通常處理這種情況?如何處理多個用戶的localStorage?

讓我們想象一下,我能有什麼來識別用戶喜歡上了前端側的獨特userId。我可能會做類似如下:

// retrieve the data 
data = JSON.parse(window.localStorage.getItem(userId)) || {}; 

// persist the data 
window.localStorage.setItem(userId, JSON.stringify(data)); 

這是一種天真的做事方式?

編輯: 根據@MДΓΓБДL和其他評論給予了一些更多的想法,讓我們假設數據是敏感的。在這種情況下,上面的例子確實是天真的。在這種情況下如何處理敏感數據的任何想法?或者答案可能是:不要這樣做,將它保存在後端?

+0

這不是_secure_,如果這就是你要求的。 – 2012-04-25 19:26:31

+0

信息的保密性如何?除非JSON擁有自己的認證機制,否則用戶可能很容易欺騙他的身份。 – vol7ron 2012-04-25 19:28:35

+0

@MДΓΓБДLL:不,你確實是對的。我還沒有想好這件事,但現在,讓我們假設它不是敏感數據。例如,只是一些微不足道的偏好。 – 2012-04-25 19:29:42

回答

4

敏感數據應該永遠不會存儲在客戶端上。除非您可以保證計算機的物理安全性和/或保證該計算機上的登錄用戶永遠只能是使用計算機的用戶(兩者通常都不是這樣),否則不要將敏感信息存儲在計算機上客戶端,如果你能避免它。

這是很多,很多,很多更安全的存儲在服務器上的敏感信息,並提供該信息到瀏覽器之前,需要適當的登錄憑據。然後,您可以控制服務器上數據的物理安全性,並防止任何用戶訪問不屬於他們的數據。此外,您可以使用SSL保護它在飛行中。

如果你真的想在本地存儲的東西是隻適用於一個用戶和一個計算機和計算機上的一個瀏覽器,你可以提示輸入密碼,並使用該密碼來加密存儲在本地存儲/解密數據。除了臨時脫機活動,我目前還不確定爲什麼這會比將用戶體驗存儲在服務器上更好,因爲無論用戶如何訪問互聯網,該用戶都可以使用該服務。在移動訪問,平板電腦訪問,筆記本電腦訪問等這些日子裏,似乎趨勢更多的是將東西存儲在雲中,以便給定用戶可以通過他們可能使用的任何互聯網訪問方式訪問他們的數據,而不是要求他們使用完全相同的電腦。

+0

請注意,如果使用非加密方式對MAC進行加密和保護,則可以將敏感數據存儲在客戶端*上。您的Web框架可能會提供一種方法來執行此操作;如果它不打擾你自己,除非你是密碼學的熱門人物。 – Venge 2012-04-25 19:53:15

+0

嗯,我想到用用戶密碼(i.c.w.AES或類似的東西)對本地數據進行加密,這是根據@ chester1000在我的問題下的評論。我想建立在[ZeroBin](http://sebsauvage.net/paste/)和類似的想法上,你可能聽說過。 – 2012-04-25 19:56:59

+0

@fireeyedboy - 我添加了關於本地加密的評論。 – jfriend00 2012-04-25 20:04:30