2012-04-25 184 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