我运行一个在线成绩簿。为了保护学生数据的私密性,我通过 https 传输所有数据。
现在,我想使用 localStorage 来避免冗余计算和服务器请求。但是,根据 HTML5 规范,本地存储是未加密的。
这里有处理用户期望的行业标准吗?我可以想象用类似“你想使用本地存储吗?它会让一切变得更快,但如果你的计算机被泄露,学生数据可能会被盗。如果这是一台公共计算机,请选择‘否’”之类的提示用户。
用户体验方面有哪些趋势?
我运行一个在线成绩簿。为了保护学生数据的私密性,我通过 https 传输所有数据。
现在,我想使用 localStorage 来避免冗余计算和服务器请求。但是,根据 HTML5 规范,本地存储是未加密的。
这里有处理用户期望的行业标准吗?我可以想象用类似“你想使用本地存储吗?它会让一切变得更快,但如果你的计算机被泄露,学生数据可能会被盗。如果这是一台公共计算机,请选择‘否’”之类的提示用户。
用户体验方面有哪些趋势?
本地存储是 Web 应用程序可用的相对较新的功能,但已经出现了某种“行业标准”或最佳实践。考虑到您的案例的OWASP HTML5 备忘单指出:
底层存储机制可能因用户代理而异。换句话说,您的应用程序所需的任何身份验证都可以被对存储数据的机器拥有本地权限的用户绕过。因此,建议不要在本地存储中存储任何敏感信息。
无论原始页面是通过 http: 还是 https: 传递,本地访问机器(或网站中的 XSS 漏洞)都可以提取其中存储的信息。所以,简单地说,你不应该放任何敏感/私人信息。
我不知道有关本地存储机密性的任何常见用户确认消息文本,但您的说明非常清楚。但是,我仍然建议不要将敏感数据放在 localStorage 中。
免责声明:我是 HTML5 备忘单的合著者。
@Krzysztof Kotowicz 有一个很好的答案。我同意他的建议。
对于真正想要在本地存储上存储敏感信息的 Web 应用程序,另一种可能性可能是以加密形式存储它。客户端应用程序可以对其进行加密和认证(使用对称密钥加密算法和消息认证算法),存储加密版本;要读取数据,客户端软件可以检查 MAC 并解密。如果采用这种方法,避免将对称密钥存储在客户端本地存储上是非常重要的。相反,密钥应该永久存储在服务器上;客户端可以向服务器查询密钥并将密钥仅存储在内存中,但不能存储在持久存储中。
但是,在本地存储中加密数据有许多缺点和限制,这可能使其在许多环境中没有吸引力。例如,它可以防止在断开连接模式下使用应用程序。由于这些原因,@Krzysztof Kotowicz 的建议是避免将机密或敏感信息存储在本地存储中,这可能是大多数 Web 应用程序的最佳建议。
您可以考虑开发通常称为“主机证明应用程序”或“零知识网络应用程序”的东西。它的外观和行为类似于普通的 Web 应用程序,但所有用户数据在上传之前都由浏览器本身在本地加密。加密过程的密钥是永远不会发送或保存到服务器的密码。因此,除了用户自己之外,没有人可以访问数据。
免责声明:这可能是一个有偏见的建议,因为我是使用这种方法的在线密码管理器 Clipperz 的联合创始人。
您可以在 Clipperz 网站上阅读有关零知识 Web 应用程序架构的更多信息。如果您决定自己编写,您可以使用 Clipperz 的加密原语Javascript 库(AGPL 许可)或使用斯坦福的其他加密库。